home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #245 (1993)(Rhein-Sieg-Soft).zip / Franz PD Disk #245 (1993)(Rhein-Sieg-Soft).adf / AmBOS / AmBOS.ASC / AmBOS.ASC
Text File  |  1993-07-21  |  85KB  |  3,638 lines

  1. '* ------------------------------------      
  2. '* AmBOS V2.0b 
  3. '*           
  4. '* (p)1993 by Volker Stepprath 
  5. '* (c)1993 by Testaware <Public Domain>
  6. '* 
  7. '* AMOS V1.31 & ACmp V1.0          
  8. '* (c)1991 by Europress Software       
  9. '* ------------------------------------      
  10. '
  11. Set Buffer 56
  12. '
  13. '**** Variablen installieren 
  14. Dim XDIRA$(200),XSTATUSA(200)
  15. Dim XDIRB$(200),XSTATUSB(200)
  16. Dim X09NAME$(9),X09$(9),XMEND$(14)
  17. Global XDIRA$(),XSTATUSA(),XPOSA,XANZA#,XLENA#,XBARA#,XBARPOSA#
  18. Global XDIRB$(),XSTATUSB(),XPOSB,XANZB#,XLENB#,XBARB#,XBARPOSB#
  19. Global XDISKNAMEA$,XDISKNAMEB$,X09NAME$(),X09$(),X09A,X09B
  20. Global XMEND$(),XMENABCD,XFILE$,XSD,XPROTECT,XHELP
  21. X09A=0
  22. X09B=1
  23. XDISKNAMEA$="SYS:"
  24. XDISKNAMEB$="SYS:"
  25. XMEND$(14)="CREATE="
  26. '
  27. '**** AmBOS installieren       
  28. Request Off 
  29. Set Dir 30,""
  30. Key Speed 10,2
  31. _INSTALLAMBOS
  32. _INSTALLSCREEN
  33. Amos To Front 
  34. '
  35. If Exist("SYS:S/.ambosmenu")
  36.    Open In 1,"SYS:S/.ambosmenu"
  37.       For I=0 To 13
  38.          Input #1,XMEND$(I)
  39.       Next I
  40.    Close 1
  41. End If 
  42. '
  43. '
  44. '**** Hauptschleife
  45. Do 
  46.    Ink 1,0
  47.    Clear Key 
  48.    Every 3000 Proc _MEMTIME
  49.    _MEMTIME
  50.    Repeat 
  51.       MK=Mouse Click
  52.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  53.       TASTE$=Upper$(Inkey$)
  54.       If XHELP=0
  55.          XHELP=Scancode
  56.          If XHELP=95
  57.             _TXT["Please choose option you want to explain <Links=Deutsch / Right=English> !"]
  58.          Else 
  59.             XHELP=0
  60.          End If 
  61.       End If 
  62.       If Asc(TASTE$)=13 Then _INSTALLSCREEN
  63.       If Asc(TASTE$)=65 Then MK=True : X=564 : Y=210
  64.       If Asc(TASTE$)=66 Then MK=True : X=584 : Y=210
  65.       If Asc(TASTE$)=67 Then MK=True : X=604 : Y=210
  66.       If Asc(TASTE$)=68 Then MK=True : X=624 : Y=210
  67.       Multi Wait 
  68.    Until MK
  69.    Every Off 
  70.    '
  71. '**** Datenfelder scrollen 
  72.    If X>301 and X<317 and Y>151 and Y<165
  73.       _G[301,152,317,164,1]
  74.       While Mouse Key : _SCROLLDOWN[0] : Wend 
  75.       _G[301,152,317,164,0]
  76.    End If 
  77.    If X>301 and X<319 and Y>165 and Y<179
  78.       _G[301,166,317,178,1]
  79.       While Mouse Key : _SCROLLUP[0] : Wend 
  80.       _G[301,166,317,178,0]
  81.    End If 
  82.    If X>322 and X<339 and Y>151 and Y<165
  83.       _G[322,152,338,164,1]
  84.       While Mouse Key : _SCROLLDOWN[1] : Wend 
  85.       _G[322,152,338,164,0]
  86.    End If 
  87.    If X>321 and X<339 and Y>165 and Y<179
  88.       _G[322,166,338,178,1]
  89.       While Mouse Key : _SCROLLUP[1] : Wend 
  90.       _G[322,166,338,178,0]
  91.    End If 
  92.    If X>300 and X<318 and Y>29 and Y<151
  93.       _SCROLLPAGE[0,Y]
  94.    End If 
  95.    If X>321 and X<339 and Y>29 and Y<151
  96.       _SCROLLPAGE[1,Y]
  97.    End If 
  98.    If X>300 and X<318 and Y>179 and Y<193
  99.       _G[301,180,317,192,1]
  100.       _SCROLLTOPBUTTOM[0,MK]
  101.       _G[301,180,317,192,0]
  102.    End If 
  103.    If X>321 and X<339 and Y>179 and Y<193
  104.       _G[322,180,338,192,1]
  105.       _SCROLLTOPBUTTOM[1,MK]
  106.       _G[322,180,338,192,0]
  107.    End If 
  108.    '
  109. '**** Device 
  110.    If Y>14 and Y<28
  111.       If X>0 and X<53
  112.          _G[0,15,52,27,1] : _GETDEVICES[0]
  113.       End If 
  114.       If X>366 and X<420
  115.          _G[367,15,419,27,1] : _GETDEVICES[1]
  116.       End If 
  117.       '
  118. '**** Update 
  119.       If X>53 and X<105
  120.          _G[55,15,107,27,1] : _LESEDISK[XDISKNAMEA$,0]
  121.       End If 
  122.       If X>421 and X<475
  123.          _G[422,15,474,27,1] : _LESEDISK[XDISKNAMEB$,1]
  124.       End If 
  125.       '
  126. '**** Parent 
  127.       If X>109 and X<163
  128.          _G[110,15,162,27,1]
  129.          If XDISKNAMEA$<>""
  130.             If Exist(XDISKNAMEA$)
  131.                Dir$=XDISKNAMEA$ : Parent : XDISKNAMEA$=Dir$
  132.                _LESEDISK[XDISKNAMEA$,0]
  133.             End If 
  134.          End If 
  135.       End If 
  136.       If X>475 and X<527
  137.          _G[477,15,529,27,1]
  138.          If XDISKNAMEB$<>""
  139.             If Exist(XDISKNAMEB$)
  140.                 Dir$=XDISKNAMEB$ : Parent : XDISKNAMEB$=Dir$
  141.                 _LESEDISK[XDISKNAMEB$,1]
  142.             End If 
  143.          End If 
  144.       End If 
  145.       '
  146. '**** All / Clear
  147.       If X>164 and X<218
  148.          _G[165,15,217,27,1] : _ALL[0]
  149.       End If 
  150.       If X>219 and X<273
  151.          _G[220,15,272,27,1] : _CLEAR[0]
  152.       End If 
  153.       If X>532 and X<585
  154.          _G[532,15,584,27,1] : _ALL[1]
  155.       End If 
  156.       If X>586 and X<640
  157.          _G[587,15,639,27,1] : _CLEAR[1]
  158.       End If 
  159.       '
  160. '**** 0 - 9 / <- * ->
  161.       If X>273 and X<299
  162.          If MK=1 : Add X09A,1,0 To 9 Else Add X09A,-1,0 To 9 : End If 
  163.          _G[275,15,298,27,1] : _X09AB[0] : _SCROLLBAR[0] : _G[275,15,298,27,0]
  164.       End If 
  165.       If X>342 and X<365
  166.          If MK=1 : Add X09B,1,0 To 9 Else Add X09B,-1,0 To 9 : End If 
  167.          _G[341,15,364,27,1] : _X09AB[1] : _SCROLLBAR[1] : _G[341,15,364,27,0]
  168.       End If 
  169.       If X>300 and X<339
  170.          _G[301,15,338,27,1] : _SOURCEDEST : _G[301,15,338,27,0]
  171.       End If 
  172.    End If 
  173.    '
  174. '**** Files selektieren
  175.    If Y>31 and Y<178
  176.       If X>0 and X<299
  177.          _SELEKTION[0,MK,Y]
  178.       End If 
  179.       If X>340 and X<640
  180.          _SELEKTION[1,MK,Y]
  181.       End If 
  182.    End If 
  183.    '
  184. '**** MenÜoptionen 
  185.    If Y>194 and Y<208
  186.       X=X/80
  187.       _G[X*80+1,195,X*80+78,207,1]
  188.       If XHELP=0
  189.          If XMENABCD=0
  190.             On X+1 Proc _COPY,_COPYTO,_MOVE,_MOVETO,_DELETE,_MAKEDIR,_RENAME,_PROTECT
  191.          End If 
  192.          If XMENABCD=1
  193.             On X+1 Proc _SORT,_MERGE,_COMPARE,_SAVEMEM,_PACK,_UNPACK,_CHECKVEC,_CLEARSYS
  194.          End If 
  195.          If XMENABCD=2
  196.             On X+1 Proc _VALUE,_COLOURS,_GETDAY,_OPENWB,_CLOSEWB,_CLOSE,_ABOUT,_EDITOR
  197.          End If 
  198.          If XMENABCD=3
  199.             _CALLCOMMAND[X]
  200.          End If 
  201.          Erase 7
  202.       Else 
  203.          _HELP[MK,X,0]
  204.       End If 
  205.    End If 
  206.    If X<558 and Y>209 and Y<223
  207.       X=X/80
  208.       _G[X*80+1,210,X*80+78,222,1]
  209.       If XHELP=0
  210.          If XMENABCD=0
  211.             On X+1 Proc _COMMENT,_READ,_HEXREAD,_SHOWIFF,_EXECUTE,_SIZE,_INFO
  212.          End If 
  213.          If XMENABCD=1
  214.             On X+1 Proc _CONVASM,_CONVBAS,_CONVASC,_CONVPBK,_PLAYABK,_PLAYMED,_PLAYMOD
  215.          End If 
  216.          If XMENABCD=2
  217.             On X+1 Proc _DISKCOPY,_FORMAT,_VERIFY,_INSTALL,_BLKDAT,_DATBLK,_EXIT
  218.          End If 
  219.          If XMENABCD=3
  220.             _CALLCOMMAND[X+8]
  221.          End If 
  222.          Erase 7
  223.       Else 
  224.          _HELP[MK,X,1]
  225.       End If 
  226.    End If 
  227.    '
  228. '**** A|B|C|D
  229.    If X>563 and X<636 and Y>209 and Y<223
  230.       Add X,-564 : X=X/20 : XMENABCD=X
  231.       _NEWMENU[XMENABCD]
  232.       _MENU[XMENABCD]
  233.    End If 
  234.    '
  235.    While Mouse Key<>0 : Wend 
  236.    Fix(0)
  237.    _NEWGG[0] : _NEWGG[1] : _OPTIONOFF
  238. Loop 
  239. '
  240. '**** MenÜ A 
  241. Procedure _COPY
  242.    _DPROTECT
  243.    If XPROTECT<82 Then Pop Proc
  244.    '
  245.    If XSD=0
  246.       A=XANZA#
  247.       A$=XDISKNAMEA$
  248.       B$=XDISKNAMEB$
  249.    Else 
  250.       A=XANZB#
  251.       A$=XDISKNAMEB$
  252.       B$=XDISKNAMEA$
  253.    End If 
  254.    '
  255.    If A$=B$
  256.       _TXT["Sourcedrive & Destinationdrive are the same !"]
  257.       Pop Proc
  258.    End If 
  259.    '
  260.    For I=0 To A
  261.       If XSD=0
  262.          N$=XDIRA$(I)
  263.          N=XSTATUSA(I)
  264.       Else 
  265.          N$=XDIRB$(I)
  266.          N=XSTATUSB(I)
  267.       End If 
  268.       If N and Instr(N$,"[DIR]")=0
  269.          _REALNAME[N$]
  270.          If Exist(A$+XFILE$)
  271.             _KOPIEREN[A$+XFILE$,B$+XFILE$]
  272.          End If 
  273.       End If 
  274.    Next I
  275.    '
  276.    If XSD=0
  277.       _LESEDISK[XDISKNAMEB$,1]
  278.       _CLEAR[0]
  279.    Else 
  280.       _LESEDISK[XDISKNAMEA$,0]
  281.       _CLEAR[1]
  282.    End If 
  283. End Proc
  284. Procedure _COPYTO
  285.    _DPROTECT
  286.    If XPROTECT<82 Then Pop Proc
  287.    '
  288.    If XSD=0
  289.       A=XANZA#
  290.       A$=XDISKNAMEA$
  291.       B$=XDISKNAMEB$
  292.    Else 
  293.       A=XANZB#
  294.       A$=XDISKNAMEB$
  295.       B$=XDISKNAMEA$
  296.    End If 
  297.    '
  298.    For I=0 To A
  299.       If XSD=0
  300.          N$=XDIRA$(I)
  301.          N=XSTATUSA(I)
  302.       Else 
  303.          N$=XDIRB$(I)
  304.          N=XSTATUSB(I)
  305.       End If 
  306.       If N and Instr(N$,"[DIR]")=0
  307.          _REALNAME[N$]
  308.          N$=XFILE$
  309.          If Exist(A$+N$)
  310.             _TXT["Old filename: "+N$]
  311.             _TXT["New filename:"]
  312.             _EINGABE[15]
  313.             If XFILE$<>""
  314.                _KOPIEREN[A$+N$,B$+XFILE$]
  315.             Else 
  316.                _TXT[N$+" not copied !"]
  317.             End If 
  318.          End If 
  319.       End If 
  320.    Next I
  321.    '
  322.    If XSD=0
  323.       _LESEDISK[XDISKNAMEB$,1]
  324.       _CLEAR[0]
  325.    Else 
  326.       _LESEDISK[XDISKNAMEA$,0]
  327.       _CLEAR[1]
  328.    End If 
  329. End Proc
  330. Procedure _MOVE
  331.    If XSD=0
  332.       A=XANZA#
  333.       A$=XDISKNAMEA$
  334.       B$=XDISKNAMEB$
  335.    Else 
  336.       A=XANZB#
  337.       A$=XDISKNAMEB$
  338.       B$=XDISKNAMEA$
  339.    End If 
  340.    '    
  341.    If A$=B$
  342.       _TXT["Sourcedrive & Destinationdrive are the same !"]
  343.       Pop Proc
  344.    End If 
  345.    '
  346.    N$=Left$(A$,Instr(A$,":"))
  347.    N2$=Left$(B$,Instr(B$,":"))
  348.    If N$<>N2$
  349.       _TXT["It`s not possible to MOVE across two different drives !"]
  350.       Pop Proc
  351.    End If 
  352.    '    
  353.    On Error Goto _FEHLER
  354.    '
  355.    For I=0 To A
  356.       If XSD=0
  357.          N$=XDIRA$(I)
  358.          N=XSTATUSA(I)
  359.       Else 
  360.          N$=XDIRB$(I)
  361.          N=XSTATUSB(I)
  362.       End If 
  363.       _REALNAME[N$]
  364.       If N
  365.          _TXT["Moving..."+XFILE$+" !"]
  366.          Rename A$+XFILE$ To B$+XFILE$
  367.          If XE : Pop Proc : End If 
  368.       End If 
  369.    Next I
  370.    '
  371.    _LESEDISK[XDISKNAMEB$,1]
  372.    _LESEDISK[XDISKNAMEA$,0]
  373. Pop Proc
  374. '
  375. _FEHLER:
  376.    XE=Errn
  377.    _ERROR[XE]
  378.    Resume Next 
  379. End Proc
  380. Procedure _MOVETO
  381.    If XSD=0
  382.       A=XANZA#
  383.       A$=XDISKNAMEA$
  384.       B$=XDISKNAMEB$
  385.    Else 
  386.       A=XANZB#
  387.       A$=XDISKNAMEB$
  388.       B$=XDISKNAMEA$
  389.    End If 
  390.    If A$=B$
  391.       _TXT["Sourcedrive & Destinationdrive are the same !"]
  392.       Pop Proc
  393.    End If 
  394.    '
  395.    N$=Left$(A$,Instr(A$,":"))
  396.    N2$=Left$(B$,Instr(B$,":"))
  397.    If N$<>N2$
  398.       _TXT["It`s not possible to MOVE across two different drives !"]
  399.       Pop Proc
  400.    End If 
  401.    '
  402.    On Error Goto _FEHLER
  403.    '
  404.    For I=0 To A
  405.       If XSD=0
  406.          N$=XDIRA$(I)
  407.          N=XSTATUSA(I)
  408.       Else 
  409.          N$=XDIRB$(I)
  410.          N=XSTATUSB(I)
  411.       End If 
  412.       _REALNAME[N$]
  413.       If N
  414.          _TXT["Moving..."+XFILE$+" !"]
  415.          N$=XFILE$
  416.          _TXT["Enter new name:"]
  417.          _EINGABE[17]
  418.          If XFILE$<>""
  419.             Rename A$+N$ To B$+XFILE$
  420.             If XE : Pop Proc : End If 
  421.          Else 
  422.             _TXT["File not moved !"]
  423.          End If 
  424.       End If 
  425.    Next I
  426.    '
  427.    _LESEDISK[XDISKNAMEB$,1]
  428.    _LESEDISK[XDISKNAMEA$,0]
  429. Pop Proc
  430. '
  431. _FEHLER:
  432.    XE=Errn
  433.    _ERROR[XE]
  434.    Resume Next 
  435. End Proc
  436. Procedure _DELETE
  437.    _DPROTECT
  438.    If XPROTECT<82 Then Pop Proc
  439.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZB# Else B$=XDISKNAMEA$ : A=XANZA#
  440.    '
  441.    On Error Goto _FEHLER
  442.    '
  443.    For I=0 To A
  444.       If XSD=0
  445.          N$=XDIRB$(I)
  446.          N=XSTATUSB(I)
  447.       Else 
  448.          N$=XDIRA$(I)
  449.          N=XSTATUSA(I)
  450.       End If 
  451.       _REALNAME[N$]
  452.       If N
  453.          _TXT["Deleting... "+XFILE$+" !"]
  454.          Kill B$+XFILE$
  455.       End If 
  456.    Next I
  457.    If XSD=0
  458.       _LESEDISK[XDISKNAMEB$,1]
  459.    Else 
  460.       _LESEDISK[XDISKNAMEA$,0]
  461.    End If 
  462.    Pop Proc
  463. _FEHLER:
  464.    XE=Errn
  465.    _ERROR[XE]
  466.    Resume Next 
  467. End Proc
  468. Procedure _RENAME
  469.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZB# Else B$=XDISKNAMEA$ : A=XANZA#
  470.    '
  471.    On Error Goto _FEHLER
  472.    '
  473.    For I=0 To A
  474.       If XSD=0
  475.          N$=XDIRB$(I)
  476.          N=XSTATUSB(I)
  477.       Else 
  478.          N$=XDIRA$(I)
  479.          N=XSTATUSA(I)
  480.       End If 
  481.       _REALNAME[N$]
  482.       If N
  483.          _TXT["Rename "+XFILE$+" as:"]
  484.          N$=XFILE$
  485.          _EINGABE[13+Len(XFILE$)]
  486.          XFILE$=Left$(XFILE$,27)
  487.          If XFILE$<>""
  488.             Rename B$+N$ To B$+XFILE$
  489.          End If 
  490.       End If 
  491.    Next I
  492.    '
  493.    If XSD=0 Then _LESEDISK[XDISKNAMEB$,1] Else _LESEDISK[XDISKNAMEA$,0]
  494. Pop Proc
  495.    '
  496. _FEHLER:
  497.    XE=Errn
  498.    _ERROR[XE]
  499.    Resume Next 
  500. End Proc
  501. Procedure _MAKEDIR
  502.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZB# Else B$=XDISKNAMEA$ : A=XANZA#
  503.    '
  504.    On Error Goto _FEHLER
  505.    '
  506.    Do 
  507.       _TXT["Enter new directory:"]
  508.       _EINGABE[22]
  509.       Exit If XFILE$=""
  510.       XFILE$=Left$(XFILE$,27)
  511.       Mkdir B$+XFILE$
  512.    Loop 
  513.    '
  514.    If XSD=0 Then _LESEDISK[XDISKNAMEB$,1] Else _LESEDISK[XDISKNAMEA$,0]
  515. Pop Proc
  516.    '
  517. _FEHLER:
  518.    XE=Errn
  519.    _ERROR[XE]
  520.    Resume Next 
  521. End Proc
  522. Procedure _INFO
  523.    If XSD=0 Then DEV$=XDISKNAMEB$ Else DEV$=XDISKNAMEA$
  524.    '
  525.    If DEV$="" Then _TXT["No drive selected !"] : Pop Proc
  526.    If Not Exist(DEV$) Then _TXT[DEV$+" not available !"] : Pop Proc
  527.    '
  528.    Dir$=DEV$
  529.    DEV$=Dir$
  530.    DEV$=DEV$+Chr$(0)
  531.    '
  532.    Repeat 
  533.       INFO$=Space$(40)+Chr$(0)
  534.       IN=Varptr(INFO$)
  535.       Dreg(1)=Varptr(DEV$)
  536.       Dreg(2)=-2
  537.       LVOLOCK=Doscall(-84)
  538.       Dreg(1)=LVOLOCK
  539.       Dreg(2)=IN
  540.       LVOINFO=Doscall(-114)
  541.       LVOUNLOCK=Doscall(-90)
  542.    Until Leek(IN+8)<84
  543.    '
  544.    N=Leek(IN+4)
  545.    If N=-1 Then N0$="RAM:" Else N0$="DF"+Str$(N)-" "+":"
  546.    N1$=Str$(Leek(IN+16))-" "
  547.    N1$=Space$(4-Len(N1$))+N1$
  548.    N=Leek(IN+12)-Leek(IN+16)
  549.    N2$=Str$(N)-" "
  550.    N2$=Space$(4-Len(N2$))+N2$
  551.    N3$=Str$(Dfree)-" "
  552.    N3$=Space$(8-Len(N3$))+N3$
  553.    N4$=Str$(Int(100-(100.0/856928.0)*Dfree))-" "
  554.    N4$=Space$(3-Len(N4$))+N4$+"%"
  555.    N5$=Str$(Leek(IN))-" "
  556.    N5$=Space$(3-Len(N5$))+N5$
  557.    N=Leek(IN+8)
  558.    If N=80 Then N6$="Read Only   "
  559.    If N=81 Then N6$="Validating  "
  560.    If N=82 Then N6$="Read/Write  "
  561.    N=Instr(DEV$,":")
  562.    DEV$=Left$(DEV$,Min(17,N-1))
  563.    N$="    "
  564.    _TXT["Unit    Used    Free    Bytes    Full    Errs    Status     Name"]
  565.    _TXT[String$("-",76)]
  566.    _TXT[N0$+N$+N1$+N$+N2$+" "+N3$+N$+N4$+N$+N5$+"    "+N6$+DEV$]
  567. End Proc
  568. Procedure _SIZE
  569.    If XSD=0
  570.       For I=0 To XANZB#
  571.          N$=XDIRB$(I)
  572.          N=XSTATUSB(I)
  573.          Gosub _SIZE
  574.       Next I
  575.    Else 
  576.       For I=0 To XANZA#
  577.          N$=XDIRA$(I)
  578.          N=XSTATUSA(I)
  579.          Gosub _SIZE
  580.       Next I
  581.    End If 
  582.    _TXT["Dirs :"+Str$(N1)+" /"+Str$(N0)]
  583.    _TXT["Files:"+Str$(N5)+" /"+Str$(N2)]
  584.    _TXT["Bytes:"+Str$(N4)+" /"+Str$(N6)]
  585. Pop Proc
  586. '
  587. _SIZE:
  588.    If Len(N$)>35
  589.       If Instr(N$,"[DIR]")
  590.          Inc N0
  591.          If N>0 : Inc N1 : End If 
  592.       Else 
  593.          Inc N2
  594.          N3=Val(Right$(N$,8))
  595.          Add N6,N3
  596.          If N>0 : Add N4,N3 : Inc N5 : End If 
  597.       End If 
  598.    End If 
  599. Return 
  600. End Proc
  601. Procedure _READ
  602.    If XSD=0 Then B$=XDISKNAMEB$ : B=XANZB# Else B$=XDISKNAMEA$ : B=XANZA#
  603.    '
  604.    On Error Goto _FEHLER
  605.    '
  606.    Fix(2)
  607.    For I=0 To B
  608.       If XSD=0
  609.          N$=XDIRB$(I)
  610.          N=XSTATUSB(I)
  611.       Else 
  612.          N$=XDIRA$(I)
  613.          N=XSTATUSA(I)
  614.       End If 
  615.       If N=-2 Then Pop Proc
  616.       If N=1 Then Gosub _LESEN : Erase 7
  617.    Next I
  618.    If XSD=0 Then _CLEAR[1] Else _CLEAR[0]
  619. Pop Proc
  620. '
  621. _LESEN:
  622.    If Instr(N$,"[DIR]") Then Return 
  623.    '
  624.    N=Val(Right$(N$,8))
  625.    _REALNAME[N$]
  626.    '    
  627.    Ink 1
  628.    _TXT["Loading "+XFILE$+" !"]
  629.    I2=0
  630.    I3=0
  631.    N1=0
  632.    N2=0
  633.    N3=0
  634.    XE=0
  635.    N$=""
  636.    '
  637.    Reserve As Data 7,N
  638.    If XE Then Return 
  639.    Bload B$+XFILE$,7
  640.    If XE Then Return 
  641.    '
  642.    Ink 0
  643.    Bar 0,15 To 640,222
  644.    '
  645.    Ink 1
  646.    _TXT["File : "+B$+XFILE$]
  647.    _TXT["Lines:"]
  648.    _TXT["Read :"]
  649.    Gosub _INFO
  650.    '    
  651.    Repeat 
  652.       Repeat 
  653.          N1=Peek(Start(7)+N2)
  654.          If N1<>10 and N2<N
  655.             N$=N$+Chr$(N1)
  656.          End If 
  657.          Inc N2
  658.          Inc N3
  659.       Until N1=10 or N3=80
  660.       '
  661.       Text 0,21+I2*8,N$
  662.       Inc I2
  663.       Inc I3
  664.       N3=0
  665.       N$=""
  666.       '
  667.       If I2=26 or N2=>N
  668.          Gosub _INFO
  669.          Repeat 
  670.             A=Asc(Inkey$)
  671.          Until A<>0
  672.          I2=0
  673.          Ink 0
  674.          Bar 0,15 To 640,222
  675.          Ink 1
  676.          Clear Key 
  677.          If A=27
  678.             Exit 
  679.          End If 
  680.       End If 
  681.    Until N2=>N
  682.    _INSTALLSCREEN
  683. Return 
  684. '
  685. _INFO:
  686.    N2=Min(N2,N)
  687.    Text 72,242,Str$(I3)
  688.    Text 72,250,Str$(100.0/N*N2)+"%  ("+Str$(N2)+" of"+Str$(N)+" Bytes )"
  689. Return 
  690. '
  691. _FEHLER:
  692.    XE=Errn
  693.    _ERROR[XE]
  694.    Resume Next 
  695. End Proc
  696. Procedure _HEXREAD
  697.    If XSD=0 Then B$=XDISKNAMEB$ : B=XANZB# Else B$=XDISKNAMEA$ : B=XANZA#
  698.    '
  699.    On Error Goto _FEHLER
  700.    '
  701.    Fix(2)
  702.    For I=0 To B
  703.       If XSD=0
  704.          N$=XDIRB$(I)
  705.          N=XSTATUSB(I)
  706.       Else 
  707.          N$=XDIRA$(I)
  708.          N=XSTATUSA(I)
  709.       End If 
  710.       If N=-2 Then Pop Proc
  711.       If N Then Gosub _LESEN : Erase 7
  712.    Next I
  713.    '
  714.    If XSD=0 Then _CLEAR[1] Else _CLEAR[0]
  715. Pop Proc
  716. '
  717. _LESEN:
  718.    If Instr(N$,"[DIR]") Then Return 
  719.    '
  720.    N=Val(Right$(N$,8))
  721.    _REALNAME[N$]
  722.    '    
  723.    Ink 1
  724.    _TXT["Loading "+XFILE$+" !"]
  725.    I2=0
  726.    I3=0
  727.    N1=0
  728.    N2=0
  729.    N3=-16
  730.    XE=0
  731.    N$=""
  732.    '
  733.    Reserve As Data 7,N
  734.    If XE Then Return 
  735.    Bload B$+XFILE$,7
  736.    If XE Then Return 
  737.    '
  738.    Ink 0
  739.    Bar 0,15 To 640,222
  740.    '
  741.    FILE$=XFILE$
  742.    Ink 1
  743.    Gosub _SCROLL
  744.    Gosub _INFO
  745.    '    
  746.    Repeat 
  747.       For A=0 To 15
  748.          N1=Peek(Start(7)+N2)
  749.          If N2<N
  750.             If N1<16
  751.                N0$=Hex$(N1,2)
  752.             Else 
  753.                N0$=Hex$(N1)
  754.             End If 
  755.             If N1<32 or(N1>127 and N1<161)
  756.                N1=46
  757.             End If 
  758.             N$=N$+Chr$(N1)
  759.             N1$=N1$+" "+N0$-"$"
  760.          Else 
  761.             N1$=N1$+"   "
  762.          End If 
  763.          Inc N2
  764.          Inc N3
  765.       Next A
  766.       '
  767.       Text 0,21+I2*8,Hex$(N3,8)+":  "+N1$+"    "+N$ : N$="" : N1$=""
  768.       Inc I2
  769.       Inc I3
  770.       '
  771.       If I2=26 or N2=>N
  772.          Gosub _INFO
  773.          Repeat 
  774.             A=Asc(Inkey$)
  775.          Until A<>0
  776.          If A=13
  777.             Gosub _LINES
  778.             _EINGABE[13]
  779.             I2=Val(XFILE$)
  780.             I2=Max(0,I2)
  781.             If I2=0
  782.                I3=0
  783.                N2=0
  784.                N3=-16
  785.             End If 
  786.             If I2>N/16
  787.                I2=0
  788.                I3=0
  789.                N2=0
  790.                N3=-16
  791.             End If 
  792.             If I2>0 and I2<=N/16
  793.                I3=I2-1
  794.                N2=I2*16
  795.                N3=N2-16
  796.             End If 
  797.             Gosub _SCROLL
  798.          End If 
  799.          I2=0
  800.          Ink 0
  801.          Bar 0,15 To 640,222
  802.          Ink 1
  803.          Clear Key 
  804.          If A=27
  805.             Exit 
  806.          End If 
  807.       End If 
  808.    Until N2=>N
  809.    _INSTALLSCREEN
  810. Return 
  811. '
  812. _SCROLL:
  813.    _TXT["File : "+B$+FILE$]
  814.    _TXT["Lines:"]
  815.    _TXT["Read :"]
  816.    Gosub _INFO
  817. Return 
  818. '
  819. _INFO:
  820.    N2=Min(N2,N)
  821.    Text 72,242,Str$(I3)
  822.    Text 72,250,Str$(100.0/N*N2)+"%  ("+Str$(N2)+" of"+Str$(N)+" Bytes )"
  823. Return 
  824. '
  825. _LINES:
  826.    _TXT["Max. lines:"+Str$(N/16+1)]
  827.    _TXT["Cur. lines:"+Str$(Max(1,I3-26))+" to"+Str$(I3)]
  828.    _TXT["Enter line:"]
  829. Return 
  830. '
  831. _FEHLER:
  832.    XE=Errn
  833.    _ERROR[XE]
  834.    Resume Next 
  835. End Proc
  836. Procedure _PROTECT
  837.    _DPROTECT
  838.    If XPROTECT<82 Then Pop Proc
  839.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZB# Else B$=XDISKNAMEA$ : A=XANZA#
  840.    '
  841.    For I=0 To A
  842.       If XSD=0
  843.          N$=XDIRB$(I)
  844.          N=XSTATUSB(I)
  845.       Else 
  846.          N$=XDIRA$(I)
  847.          N=XSTATUSA(I)
  848.       End If 
  849.       If N
  850.          _REALNAME[N$]
  851.           N$=B$+XFILE$+Chr$(0)
  852.          _TXT["Enter flags <hsparwed> for "+XFILE$+":"]
  853.          _EINGABE[30+Len(XFILE$)]
  854.          Gosub _PROTECT
  855.       End If 
  856.    Next I
  857.    If XSD Then _CLEAR[0] Else _CLEAR[1]
  858. Pop Proc
  859. '
  860. _PROTECT:
  861.    XFILE$=Upper$(XFILE$) : N=0
  862.    If Instr(XFILE$,"D")=0 : Add N,1 : End If 
  863.    If Instr(XFILE$,"E")=0 : Add N,2 : End If 
  864.    If Instr(XFILE$,"W")=0 : Add N,4 : End If 
  865.    If Instr(XFILE$,"R")=0 : Add N,8 : End If 
  866.    If Instr(XFILE$,"A") : Add N,16 : End If 
  867.    If Instr(XFILE$,"P") : Add N,32 : End If 
  868.    If Instr(XFILE$,"S") : Add N,64 : End If 
  869.    If Instr(XFILE$,"H") : Add N,128 : End If 
  870.    '
  871.    Dreg(1)=Varptr(N$)
  872.    Dreg(2)=N
  873.    LVOPROTECT=Doscall(-186)
  874.    '
  875.    If LVOPROTECT=0 Then _TXT["Can`t protect, error occured !"]
  876. Return 
  877. End Proc
  878. Procedure _COMMENT
  879.    _DPROTECT
  880.    If XPROTECT<82 Then Pop Proc
  881.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZB# Else B$=XDISKNAMEA$ : A=XANZA#
  882.    '
  883.    For I=0 To A
  884.       If XSD=0
  885.          N$=XDIRB$(I)
  886.          N=XSTATUSB(I)
  887.       Else 
  888.          N$=XDIRA$(I)
  889.          N=XSTATUSA(I)
  890.       End If 
  891.       If N
  892.          _REALNAME[N$]
  893.           N$=B$+XFILE$+Chr$(0)
  894.          _TXT["Enter comment for "+XFILE$+":"]
  895.          _EINGABE[21+Len(XFILE$)]
  896.          Gosub _COMMENT
  897.       End If 
  898.    Next I
  899.    If XSD Then _CLEAR[0] Else _CLEAR[1]
  900. Pop Proc
  901. '
  902. _COMMENT:
  903.    XFILE$=XFILE$+Chr$(0)
  904.    Dreg(1)=Varptr(N$)
  905.    Dreg(2)=Varptr(XFILE$)
  906.    LVOCOMMENT=Doscall(-180)
  907.    If LVOCOMMENT=0 Then _TXT["Can`t add comment, error occured !"]
  908. Return 
  909. End Proc
  910. Procedure _SHOWIFF
  911.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZB# Else B$=XDISKNAMEA$ : A=XANZA#
  912.    '
  913.    On Error Goto _FEHLER
  914.    '
  915.    For I=0 To A
  916.       If XSD=0
  917.          N$=XDIRB$(I)
  918.          N=XSTATUSB(I)
  919.          XSTATUSB(I)=0
  920.       Else 
  921.          N$=XDIRA$(I)
  922.          N=XSTATUSA(I)
  923.          XSTATUSA(I)=0
  924.       End If 
  925.       If N
  926.          Gosub _SHOWIFF
  927.       End If 
  928.    Next I
  929.    '
  930.    If XSD=0 Then _SHOWDIR[1] Else _SHOWDIR[0]
  931. Pop Proc
  932. '
  933. _SHOWIFF:
  934.    XE=0
  935.    If Instr(N$,"[DIR]") Then Return 
  936.    _REALNAME[N$]
  937.    _TXT["Showing "+B$+XFILE$+" as IFF picture !"]
  938.    '
  939.    Open In 1,B$+XFILE$
  940.       If XE Then Return 
  941.       N$=Input$(1,22)
  942.       N$=Upper$(N$)
  943.    Close 1
  944.    '
  945.    If Instr(N$,"ILBMBMHD")
  946.       Load Iff B$+XFILE$,1
  947.       Gosub _INFO
  948.    Else 
  949.       If Instr(N$,"PAC.PIC")
  950.          _TXT[XFILE$+" is not an IFF picture !"]
  951.          _TXT["Should I try to load as AMOS Bank <Y/N> ?:"]
  952.          N$=XFILE$
  953.          _EINGABE[44]
  954.          XFILE$=Upper$(XFILE$)
  955.          If XFILE$="Y"
  956.             Load B$+N$,7
  957.             Unpack 7 To 1
  958.             Erase 7
  959.             Gosub _INFO
  960.          End If 
  961.       Else 
  962.          _TXT[XFILE$+" is not an IFF or AmBk picture !"]
  963.       End If 
  964.    End If 
  965. Return 
  966. '
  967. _INFO:
  968.    Screen 1
  969.    If XE Then Return 
  970.    Screen Hide 0
  971.    N=Screen Height
  972.    N0=Screen Width
  973.    N1=Screen Colour
  974.    While Asc(Inkey$)=0 and Mouse Key=0 : Wend 
  975.    Screen Close 1
  976.    Screen Show 0
  977.    Screen 0
  978.    _TXT["Height:"+Str$(N)+"    Width:"+Str$(N0)+"    Colours:"+Str$(N1)]
  979.    Wait 50
  980. Return 
  981. '
  982. _FEHLER:
  983.    XE=Errn
  984.    _ERROR[XE]
  985.    Resume Next 
  986. End Proc
  987. Procedure _EXECUTE
  988.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZB# Else B$=XDISKNAMEA$ : A=XANZA#
  989.    '
  990.    For I=0 To A
  991.       If XSD=0
  992.          N$=XDIRB$(I)
  993.          N=XSTATUSB(I)
  994.       Else 
  995.          N$=XDIRA$(I)
  996.          N=XSTATUSA(I)
  997.       End If 
  998.       If N<>0 and Instr(N$,"[DIR]")=0
  999.          _REALNAME[N$]
  1000.           N$=Chr$(34)+B$+XFILE$+Chr$(34)
  1001.          _TXT["Enter parameters for "+XFILE$+":"]
  1002.          _EINGABE[24+Len(XFILE$)]
  1003.          If XFILE$<>""
  1004.             XFILE$=N$+" "+XFILE$
  1005.          Else 
  1006.             XFILE$=N$
  1007.          End If 
  1008.          _RUN
  1009.       End If 
  1010.    Next I
  1011.    If XSD=0 Then _CLEAR[1] Else _CLEAR[0]
  1012. End Proc
  1013. '
  1014. '**** MenÜ B 
  1015. Procedure _SORT
  1016.    _DPROTECT
  1017.    If XPROTECT<82 Then Pop Proc
  1018.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZB# Else B$=XDISKNAMEA$ : A=XANZA#
  1019.    '
  1020.    For I=0 To A
  1021.       If XSD=0
  1022.          N$=XDIRB$(I)
  1023.          N=XSTATUSB(I)
  1024.       Else 
  1025.          N$=XDIRA$(I)
  1026.          N=XSTATUSA(I)
  1027.       End If 
  1028.       If N and Instr(N$,"[DIR]")=0
  1029.          XFILE$=N$
  1030.          _ORDNEN[B$]
  1031.          Erase 7
  1032.       End If 
  1033.    Next I
  1034.    If XSD=0 Then _LESEDISK[B$,1] Else _LESEDISK[B$,0]
  1035. End Proc
  1036. Procedure _MERGE
  1037.    _DPROTECT
  1038.    If XPROTECT<82 Then Pop Proc
  1039.    If XSD=0 Then A$=XDISKNAMEA$ : B$=XDISKNAMEB$ : A=XANZA# Else A$=XDISKNAMEB$ : B$=XDISKNAMEA$ : A=XANZB#
  1040.    '
  1041.    On Error Goto _FEHLER
  1042.    '
  1043.    For I=0 To A
  1044.       If XSD=0
  1045.          N$=XDIRA$(I)
  1046.          N=XSTATUSA(I)
  1047.       Else 
  1048.          N$=XDIRB$(I)
  1049.          N=XSTATUSB(I)
  1050.       End If 
  1051.       If N and Instr(N$,"[DIR]")=0
  1052.          FGR=FGR+Val(Right$(N$,8))
  1053.       End If 
  1054.    Next I
  1055.    '
  1056.    If FGR<>0 and Exist(A$)
  1057.       Reserve As Data 7,FGR
  1058.       If XE
  1059.          Erase 7
  1060.          Pop Proc
  1061.       End If 
  1062.       _TXT["Enter new filename:"]
  1063.       _EINGABE[21]
  1064.       If XFILE$<>""
  1065.          N1$=B$+XFILE$
  1066.          '    
  1067.          FGR=Start(7)
  1068.          For I=0 To A
  1069.             If XSD=0
  1070.                N$=XDIRA$(I)
  1071.                N=XSTATUSA(I)
  1072.             Else 
  1073.                N$=XDIRB$(I)
  1074.                N=XSTATUSB(I)
  1075.             End If 
  1076.             If N and Instr(N$,"[DIR]")=0
  1077.                N=Val(Right$(N$,8))
  1078.                _REALNAME[N$]
  1079.                _TXT["Merging... "+A$+XFILE$+" !"]
  1080.                If Exist(A$+XFILE$)
  1081.                   Bload A$+XFILE$,FGR
  1082.                   Add FGR,N
  1083.                Else 
  1084.                   _TXT[B$+XFILE$+" not found !"]
  1085.                   _TXT["Merging aborted !"]
  1086.                   Erase 7
  1087.                   Pop Proc
  1088.                End If 
  1089.             End If 
  1090.          Next I
  1091.          _TXT["Saving files to "+N1$+" !"]
  1092.          Bsave N1$,Start(7) To FGR
  1093.          Erase 7
  1094.          If XSD=0
  1095.             _CLEAR[0]
  1096.             _LESEDISK[B$,1]
  1097.          End If 
  1098.       Else 
  1099.          _TXT["Merging aborted !"]
  1100.          Erase 7
  1101.       End If 
  1102.    End If 
  1103. Pop Proc
  1104. '
  1105. _FEHLER:
  1106.    XE=Errn
  1107.    _ERROR[XE]
  1108.    Resume Next 
  1109. End Proc
  1110. Procedure _COMPARE
  1111.    On Error Goto _FEHLER
  1112.    A=Max(XANZA#,XANZB#)
  1113.    For I=0 To A
  1114.       If XSTATUSA(I) and Instr(XDIRA$(I),"[DIR]")=0
  1115.          N0$=XDIRA$(I)
  1116.          I=A
  1117.       End If 
  1118.    Next I
  1119.    For I=0 To A
  1120.       If XSTATUSB(I) and Instr(XDIRB$(I),"[DIR]")=0
  1121.          N1$=XDIRB$(I)
  1122.          I=A
  1123.       End If 
  1124.    Next I
  1125.    '
  1126.    If N0$="" or(N1$="") Then _TXT["Two files needed to compare !"] : Pop Proc
  1127.    '
  1128.    N=Max(Val(Right$(N0$,8)),Val(Right$(N1$,8)))
  1129.    N2=Min(Val(Right$(N0$,8)),Val(Right$(N1$,8)))
  1130.    '
  1131.    _REALNAME[N0$]
  1132.    N0$=XDISKNAMEA$+XFILE$
  1133.    _REALNAME[N1$]
  1134.    N1$=XDISKNAMEB$+XFILE$
  1135.    '
  1136.    Reserve As Data 7,N
  1137.    If XE Then Pop Proc
  1138.    Reserve As Data 8,N
  1139.    If XE Then Pop Proc
  1140.    '
  1141.    Bload N0$,7
  1142.    If XE Then Pop Proc
  1143.    Bload N1$,8
  1144.    If XE Then Pop Proc
  1145.    '
  1146.    Ink 0
  1147.    Bar 0,15 To 640,222
  1148.    N0$=Left$(N0$,38)
  1149.    N0$=N0$+Space$(38-Len(N0$))
  1150.    N1$=Left$(N1$,38)
  1151.    N1$=N1$+Space$(38-Len(N1$))
  1152.    A=0
  1153.    Ink 2,1
  1154.    Text 0,20,Left$(N0$,38)
  1155.    Text 336,20,Left$(N1$,38)
  1156.    Ink 1,0
  1157.    _TXT["# of different bytes: 0"]
  1158.    '
  1159.    For I=0 To N2 Step 38
  1160.       For I2=0 To 37
  1161.          N0=Peek(Start(7)+I+I2)
  1162.          N1=Peek(Start(8)+I+I2)
  1163.          If I+I2<N2
  1164.             If N0<>N1
  1165.                Ink 2
  1166.                Inc N3
  1167.             Else 
  1168.                Ink 1
  1169.             End If 
  1170.             Text 0+I2*8,29+I3*8,Chr$(N0)
  1171.             Text 336+I2*8,29+I3*8,Chr$(N1)
  1172.          End If 
  1173.       Next I2
  1174.       Add I3,1
  1175.       If I3=25 or I=>N2
  1176.          Ink 1
  1177.          Text 190,250,Str$(N3)
  1178.          Clear Key 
  1179.          Repeat 
  1180.             A=Asc(Inkey$)
  1181.          Until A<>0
  1182.          If A=27
  1183.             Exit 
  1184.          End If 
  1185.          I3=0
  1186.          A=0
  1187.          Ink 0
  1188.          Bar 0,23 To 640,222
  1189.       End If 
  1190.    Next I
  1191.    Ink 1
  1192.    Text 190,250,Str$(N3)
  1193.    If A=0 Then Wait Key 
  1194.    Erase 7
  1195.    Erase 8
  1196.    _INSTALLSCREEN
  1197. Pop Proc
  1198. '
  1199. _FEHLER:
  1200.    XE=Errn
  1201.    _ERROR[XE]
  1202.    Erase 7
  1203.    Erase 8
  1204.    Resume Next 
  1205. End Proc
  1206. Procedure _SAVEMEM
  1207.    If XSD=0 Then B$=XDISKNAMEB$ Else B$=XDISKNAMEA$
  1208.    '
  1209.    On Error Goto _FEHLER
  1210.    '
  1211.    _TXT["Enter startaddress:"]
  1212.    _EINGABE[21]
  1213.    N0=Abs(Val(XFILE$))
  1214.    _TXT["Enter endaddress..:"]
  1215.    _EINGABE[21]
  1216.    N1=Abs(Val(XFILE$))
  1217.    '
  1218.    _TXT["Enter outputfile..:"]
  1219.    _EINGABE[21]
  1220.    If XFILE$="" Then _TXT["Save memory aborted !"] : Pop Proc
  1221.    '
  1222.    If N0>N1 Then Swap N0,N1
  1223.    '
  1224.    Bsave B$+XFILE$,N0 To N1
  1225.    If XE=88 Then Kill B$+XFILE$
  1226. Pop Proc
  1227. '
  1228. _FEHLER:
  1229.    XE=Errn
  1230.    _ERROR[XE]
  1231.    Resume Next 
  1232. End Proc
  1233. Procedure _PACK
  1234.    _DPROTECT
  1235.    If XPROTECT<82 Then Pop Proc
  1236.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZB# Else B$=XDISKNAMEA$ : A=XANZA#
  1237.    '
  1238.    On Error Goto _FEHLER
  1239.    '
  1240.    For I=0 To A
  1241.       If XSD=0
  1242.          N$=XDIRB$(I)
  1243.          N=XSTATUSB(I)
  1244.       Else 
  1245.          N$=XDIRA$(I)
  1246.          N=XSTATUSA(I)
  1247.       End If 
  1248.       If N=-2 Then Pop Proc
  1249.       If N=1 and Instr(N$,"[DIR]")=0
  1250.          XFILE$=N$
  1251.          Gosub _PACK
  1252.          Erase 7
  1253.       End If 
  1254.    Next I
  1255.    '
  1256.    If XSD=0 Then _LESEDISK[B$,1] Else _LESEDISK[B$,0]
  1257. Pop Proc
  1258. '
  1259. _PACK:
  1260.    XE=0
  1261.    N=Val(Right$(XFILE$,8))
  1262.    _REALNAME[XFILE$]
  1263.    '
  1264.    Reserve As Data 7,N
  1265.    If XE Then Return 
  1266.    Bload B$+XFILE$,7
  1267.    If XE Then Return 
  1268.    '
  1269.    _TXT["Packing "+B$+XFILE$+" !"]
  1270.    _TXT["Press CTRL + C to terminate the packing !"]
  1271.    '
  1272.    C=Squash(Start(7),N,-1,512,19)
  1273.    '
  1274.    If C=-1 Then _TXT["Sorry... it`s impossible to pack "+XFILE$+" !"]
  1275.    If C=-2 Then _TXT["Packing of "+XFILE$+" aborted !"]
  1276.    If C>0
  1277.       _TXT["Normal length:"+Str$(N)]
  1278.       _TXT["Packed length:"+Str$(C)]
  1279.       _TXT["Gained.......:"+Str$(100-(100*C)/N)+"% ="+Str$(N-C)+" bytes"]
  1280.       Bsave B$+XFILE$,Start(7) To Start(7)+C
  1281.    End If 
  1282.    Wait 50
  1283. Return 
  1284. '
  1285. _FEHLER:
  1286.    XE=Errn
  1287.    _ERROR[XE]
  1288.    Resume Next 
  1289. End Proc
  1290. Procedure _UNPACK
  1291.    _DPROTECT
  1292.    If XPROTECT<82 Then Pop Proc
  1293.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZB# Else B$=XDISKNAMEA$ : A=XANZA#
  1294.    '
  1295.    On Error Goto _FEHLER
  1296.    '
  1297.    For I=0 To A
  1298.       If XSD=0
  1299.          N$=XDIRB$(I)
  1300.          N=XSTATUSB(I)
  1301.       Else 
  1302.          N$=XDIRA$(I)
  1303.          N=XSTATUSA(I)
  1304.       End If 
  1305.       If N=-2 Then Pop Proc
  1306.       If N=1 and Instr(N$,"[DIR]")=0
  1307.          XFILE$=N$
  1308.          Gosub _UNPACK
  1309.          Erase 7
  1310.       End If 
  1311.    Next I
  1312.    '
  1313.    If XSD=0 Then _LESEDISK[B$,1] Else _LESEDISK[B$,0]
  1314. Pop Proc
  1315. '
  1316. _UNPACK:
  1317.    XE=0
  1318.    N=Val(Right$(XFILE$,8))
  1319.    _REALNAME[XFILE$]
  1320.    '
  1321.    Reserve As Work 7,200000
  1322.    If XE Then Return 
  1323.    Bload B$+XFILE$,7
  1324.    If XE Then Return 
  1325.    '
  1326.    _TXT["Unpacking "+XFILE$+"... !"]
  1327.    C=Unsquash(Start(7),N)
  1328.    _TXT["Unpacked length:"+Str$(C)+" bytes !"]
  1329.    '
  1330.    If XFILE$<>""
  1331.       Bsave B$+XFILE$,Start(7) To Start(7)+C
  1332.    End If 
  1333. Return 
  1334. '
  1335. _FEHLER:
  1336.    XE=Errn
  1337.    _ERROR[XE]
  1338.    Resume Next 
  1339. End Proc
  1340. Procedure _CHECKVEC
  1341.    For I=0 To 4
  1342.       Read N$,N
  1343.       _TXT["Checking... "+N$]
  1344.       Add N,Leek(4)
  1345.       N=Leek(N)
  1346.       If N Then Exit 
  1347.    Next 
  1348.    If N
  1349.       _TXT["Be carefull... "+N$+" is abnormal ( "+Hex$(N,8)+" ) !"]
  1350.    Else 
  1351.       _TXT["No abnormal pointer of any vector !"]
  1352.    End If 
  1353. Data "ColdCapture",$2A
  1354. Data "CoolCapture",$2E
  1355. Data "WarmCapture",$32
  1356. Data "KickMemPtr",$222
  1357. Data "KickTagPtr",$226
  1358. End Proc
  1359. Procedure _CLEARSYS
  1360.    _TXT["Are you sure to clear & reset your system <Y/N> ?:"]
  1361.    _EINGABE[52]
  1362.    If Upper$(XFILE$)<>"Y" Then Pop Proc
  1363.    For I=1 To 88
  1364.       Read N
  1365.       N$=N$+Chr$(N)
  1366.    Next 
  1367.    Call Varptr(N$)
  1368. Data 51,252,64,0,0,223,240,154,44,121,0,0,0,4,34,60,170,170
  1369. Data 187,187,45,65,0,36,45,65,0,38,45,65,0,62,45,65,0,78
  1370. Data 45,65,0,82,45,65,2,42,12,110,0,36,0,20,109,4,78,238
  1371. Data 253,42,75,250,0,8,78,174,255,226,0,0,32,124,1,0,0,0
  1372. Data 145,232,255,236,32,104,0,4,85,136,78,112,78,208,0,0
  1373. End Proc
  1374. Procedure _CONVASM
  1375.    _DPROTECT
  1376.    If XPROTECT<82 Then Pop Proc
  1377.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZA# Else B$=XDISKNAMEA$ : A=XANZB#
  1378.    '
  1379.    For I=0 To A
  1380.       If XSD=0
  1381.          N$=XDIRA$(I)
  1382.          N=XSTATUSA(I)
  1383.       Else 
  1384.          N$=XDIRB$(I)
  1385.          N=XSTATUSB(I)
  1386.       End If 
  1387.       If N<0 Then Pop Proc
  1388.       If N and Instr(N$,"[DIR]")=0
  1389.          XFILE$=N$
  1390.          _KONVERTIEREN[";","Save as assembler source:",Chr$(9)+"DC."]
  1391.          Erase 7
  1392.       End If 
  1393.    Next I
  1394.    '
  1395.    If XSD=0 Then _LESEDISK[B$,1] Else _LESEDISK[B$,0]
  1396. End Proc
  1397. Procedure _CONVBAS
  1398.    _DPROTECT
  1399.    If XPROTECT<82 Then Pop Proc
  1400.    If XSD=0 Then A$=XDISKNAMEA$ : B$=XDISKNAMEB$ : A=XANZA# Else A$=XDISKNAMEB$ : B$=XDISKNAMEA$ : A=XANZB#
  1401.    '
  1402.    For I=0 To A
  1403.       If XSD=0
  1404.          N$=XDIRA$(I)
  1405.          N=XSTATUSA(I)
  1406.       Else 
  1407.          N$=XDIRB$(I)
  1408.          N=XSTATUSB(I)
  1409.       End If 
  1410.       If N<0 Then Pop Proc
  1411.       If N and Instr(N$,"[DIR]")=0
  1412.          XFILE$=N$
  1413.          _KONVERTIEREN["Rem ","Save as basic source....:","Data "]
  1414.          Erase 7
  1415.       End If 
  1416.    Next I
  1417.    '
  1418.    If XSD=0 Then _LESEDISK[B$,1] Else _LESEDISK[B$,0]
  1419. End Proc
  1420. Procedure _CONVASC
  1421.    _DPROTECT
  1422.    If XPROTECT<82 Then Pop Proc
  1423.    If XSD=0 Then A$=XDISKNAMEA$ : B$=XDISKNAMEB$ : A=XANZA# Else A$=XDISKNAMEB$ : B$=XDISKNAMEA$ : A=XANZB#
  1424.    '
  1425.    For I=0 To A
  1426.       If XSD=0
  1427.          N$=XDIRA$(I)
  1428.          N=XSTATUSA(I)
  1429.       Else 
  1430.          N$=XDIRB$(I)
  1431.          N=XSTATUSB(I)
  1432.       End If 
  1433.       If N<0 Then Pop Proc
  1434.       If N and Instr(N$,"[DIR]")=0
  1435.          XFILE$=N$
  1436.          _KONVERTIERENASCPBK[0]
  1437.          Erase 7
  1438.       End If 
  1439.    Next I
  1440.    '
  1441.    If XSD=0 Then _LESEDISK[B$,1] Else _LESEDISK[B$,0]
  1442. End Proc
  1443. Procedure _CONVPBK
  1444.    _DPROTECT
  1445.    If XPROTECT<82 Then Pop Proc
  1446.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZA# Else B$=XDISKNAMEA$ : A=XANZB#
  1447.    '
  1448.    For I=0 To A
  1449.       If XSD=0
  1450.          N$=XDIRA$(I)
  1451.          N=XSTATUSA(I)
  1452.       Else 
  1453.          N$=XDIRB$(I)
  1454.          N=XSTATUSB(I)
  1455.       End If 
  1456.       If N<0 Then Pop Proc
  1457.       If N and Instr(N$,"[DIR]")=0
  1458.          XFILE$=N$
  1459.          _KONVERTIERENASCPBK[1]
  1460.          Erase 7
  1461.       End If 
  1462.    Next I
  1463.    '
  1464.    If XSD=0 Then _LESEDISK[B$,1] Else _LESEDISK[B$,0]
  1465. End Proc
  1466. Procedure _PLAYABK
  1467.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZB# Else B$=XDISKNAMEA$ : A=XANZA#
  1468.    On Error Goto _FEHLER
  1469.    '
  1470.    For I=0 To A
  1471.       If XSD=0
  1472.          N$=XDIRB$(I)
  1473.          N=XSTATUSB(I)
  1474.       Else 
  1475.          N$=XDIRA$(I)
  1476.          N=XSTATUSA(I)
  1477.       End If 
  1478.       If N=-2 Then Pop Proc
  1479.       If N=1 and Instr(N$,"[DIR]")=0
  1480.          XE=0
  1481.          _REALNAME[N$]
  1482.          _TXT["Loading "+XFILE$+" as AMOS Music Bank !"]
  1483.          Load B$+XFILE$,3
  1484.          If XE=0
  1485.             Music 1
  1486.             If XE=0
  1487.                _LEDONOFF
  1488.                Music Off 
  1489.             End If 
  1490.          End If 
  1491.          Erase 3
  1492.       End If 
  1493.    Next I
  1494.    '
  1495.    If XSD=0 Then _CLEAR[1] Else _CLEAR[0]
  1496. Pop Proc
  1497. '
  1498. _FEHLER:
  1499.    XE=Errn
  1500.    _ERROR[XE]
  1501.    Resume Next 
  1502. End Proc
  1503. Procedure _PLAYMED
  1504.    If XSD=0
  1505.       A=XANZB#
  1506.       B$=XDISKNAMEB$
  1507.    Else 
  1508.       A=XANZA#
  1509.       B$=XDISKNAMEA$
  1510.    End If 
  1511.    '
  1512.    MEDNAME$="medplayer.library"+Chr$(0)
  1513.    Areg(1)=Varptr(MEDNAME$)
  1514.    Dreg(0)=0
  1515.    LVOMEDBASE=Execall(-552)
  1516.    If LVOMEDBASE=0
  1517.       _TXT["Sorry, medplayer.library not available !"]
  1518.       Pop Proc
  1519.    End If 
  1520.    '
  1521.    For I=0 To A
  1522.       If XSD=0
  1523.          N$=XDIRB$(I)
  1524.          N=XSTATUSB(I)
  1525.       Else 
  1526.          N$=XDIRA$(I)
  1527.          N=XSTATUSA(I)
  1528.       End If 
  1529.       If N=-2 Then Goto _CLOSELIB
  1530.       If N=1 and Instr(N$,"[DIR]")=0
  1531.          _REALNAME[N$]
  1532.          N$=B$+XFILE$+Chr$(0)
  1533.          Gosub _PLAYMED
  1534.       End If 
  1535.    Next I
  1536.    '
  1537.    If XSD=0 Then _CLEAR[1] Else _CLEAR[0]
  1538.    '
  1539. _CLOSELIB:
  1540.    Areg(1)=LVOMEDBASE
  1541.    LVOCLOSELIBRARY=Execall(-414)
  1542. Pop Proc
  1543. '
  1544. _PLAYMED:
  1545.    _TXT["Load... "+XFILE$+" as MED module !"]
  1546.    '
  1547.    MEDADR=Varptr(N$)
  1548.    Call LVOMEDBASE-$1E
  1549.    Areg(0)=MEDADR
  1550.    Call LVOMEDBASE-$48
  1551.    MEDADR=Dreg(0)
  1552.    If MEDADR=0 Then _TXT["Can`t load "+XFILE$+" as MED module !"] : Return 
  1553.    Areg(0)=MEDADR
  1554.    Call LVOMEDBASE-$2A
  1555.    '
  1556.    _LEDONOFF
  1557.    '
  1558.    Call LVOMEDBASE-$36
  1559.    Areg(0)=MEDADR
  1560.    Call LVOMEDBASE-$4E
  1561.    Call LVOMEDBASE-$24
  1562. Return 
  1563. End Proc
  1564. Procedure _PLAYMOD
  1565.    On Error Goto _FEHLER
  1566.    '
  1567.    If XSD
  1568.       A=XANZA#
  1569.       A$=XDISKNAMEA$
  1570.    Else 
  1571.       A=XANZB#
  1572.       A$=XDISKNAMEB$
  1573.    End If 
  1574.    '
  1575.    For I=0 To A
  1576.       If XSD
  1577.          N=XSTATUSA(I)
  1578.          N$=XDIRA$(I)
  1579.       Else 
  1580.          N=XSTATUSB(I)
  1581.          N$=XDIRB$(I)
  1582.       End If 
  1583.       If N=-2 Then Pop Proc
  1584.       If N=1 and Instr(N$,"[DIR]")=0
  1585.          _REALNAME[N$]
  1586.          _TXT["Loading... "+XFILE$+" as Tracker module !"]
  1587.          Track Load A$+XFILE$,7
  1588.          If XE=0
  1589.             Track Play 
  1590.             Track Loop On 
  1591.             _LEDONOFF
  1592.             Track Stop 
  1593.          End If 
  1594.          Erase 7
  1595.       End If 
  1596.    Next I
  1597.    '
  1598.    If XSD Then _CLEAR[0] Else _CLEAR[1]
  1599. Pop Proc
  1600. '
  1601. _FEHLER:
  1602.    XE=Errn
  1603.    _ERROR[XE]
  1604.    Resume Next 
  1605. End Proc
  1606. '
  1607. '**** MenÜ C 
  1608. Procedure _VALUE
  1609.    _TXT["Enter value:"]
  1610.    _EINGABE[14]
  1611.    N=Val(XFILE$)
  1612.    _TXT["DEC:"+Str$(N)+"      HEX: "+Hex$(N,8)+"      BIN: "+Bin$(N,32)]
  1613. End Proc
  1614. Procedure _COLOURS
  1615.    Ink 0 : Bar 3,228 To 635,253
  1616.    For I=0 To 3
  1617.       Ink I : Bar 15+I*50,228 To 55+I*50,253
  1618.       _G[15+I*50,228,55+I*50,253,0]
  1619.    Next I
  1620.    _G[216,228,476,235,0]
  1621.    _G[216,237,476,244,0]
  1622.    _G[216,246,476,253,0]
  1623.    _G[504,228,563,240,0]
  1624.    _G[566,228,625,240,0]
  1625.    _G[504,241,625,253,0]
  1626.    Text 522,237,"Def"
  1627.    Text 584,237,"Sys"
  1628.    Text 556,250,"Use"
  1629.    Gosub PFN
  1630.    Do 
  1631.       While Mouse Key=0 : Wend 
  1632.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  1633.       '
  1634.       If Y>227 and Y<253
  1635.          '
  1636.          If X>15 and X<205
  1637.             P=Point(X,Y)
  1638.             Gosub PFN
  1639.          End If 
  1640.          '
  1641.          If X>215 and X<477
  1642.             Add X,-216
  1643.             X=X/17
  1644.             If Y>227 and Y<236 : X0$=Hex$(X)-"$" : End If 
  1645.             If Y>236 and Y<245 : X1$=Hex$(X)-"$" : End If 
  1646.             If Y>245 and Y<254 : X2$=Hex$(X)-"$" : End If 
  1647.             Colour P,Val("$"+X0$+X1$+X2$)
  1648.             Gosub PFN
  1649.          End If 
  1650.          '
  1651.          If X>503 and X<564 and Y>227 and Y<241
  1652.             _G[504,228,563,240,1]
  1653.             Colour 0,$77A
  1654.             Colour 1,$124
  1655.             Colour 2,$CCE
  1656.             Colour 3,$557
  1657.             Gosub PFN
  1658.             Wait 15
  1659.             _G[504,228,563,240,0]
  1660.          End If 
  1661.          If X>565 and X<626 and Y>227 and Y<241
  1662.             _G[566,228,625,240,1]
  1663.             N$=Space$(232)+Chr$(0)
  1664.             Areg(0)=Varptr(N$)
  1665.             Dreg(0)=232
  1666.             LVOGETPREFS=Intcall(-132)
  1667.             Colour 0,Deek(LVOGETPREFS+110)
  1668.             Colour 1,Deek(LVOGETPREFS+112)
  1669.             Colour 2,Deek(LVOGETPREFS+114)
  1670.             Colour 3,Deek(LVOGETPREFS+116)
  1671.             Gosub PFN
  1672.             Wait 15
  1673.             _G[566,228,625,240,0]
  1674.          End If 
  1675.          '
  1676.          If X>503 and X<626 and Y>240 and Y<256
  1677.             _G[504,241,625,253,1]
  1678.             Wait 20
  1679.             _G[504,241,625,253,0]
  1680.             Wait 20
  1681.             Ink 0 : Bar 9,228 To 635,253
  1682.             Pop Proc
  1683.          End If 
  1684.       End If 
  1685.    Loop 
  1686.    '
  1687. PFN:
  1688.    N$=Hex$(Colour(P),3)-"$"
  1689.    X0$=Mid$(N$,1,1)
  1690.    X1$=Mid$(N$,2,1)
  1691.    X2$=Mid$(N$,3,1)
  1692.    Text 486,234,X0$
  1693.    Text 486,243,X1$
  1694.    Text 486,252,X2$
  1695.    X0=Val("$"+X0$)
  1696.    X1=Val("$"+X1$)
  1697.    X2=Val("$"+X2$)
  1698.    Ink 0
  1699.    For I=0 To 2 : Bar 217,229+I*9 To 475,234+I*9 : Next I
  1700.    Ink 1
  1701.    Bar 217,230 To 218+X0*17,233
  1702.    Bar 217,239 To 218+X1*17,242
  1703.    Bar 217,248 To 218+X2*17,251
  1704.    _G[15+P2*50,228,55+P2*50,253,0]
  1705.    P2=P
  1706.    _G[15+P*50,228,55+P*50,253,1]
  1707.    Colour Back Colour(0)
  1708.    Screen Show 
  1709.    Repeat : Until Mouse Key=0
  1710. Return 
  1711. End Proc
  1712. Procedure _GETDAY
  1713.    X=2000
  1714.    Y=6
  1715.    FILE$=Space$(10)
  1716.    _TXT["Enter state of day..:"]
  1717.    _EINGABE[23]
  1718.    S=Val(XFILE$)
  1719.    '
  1720.    _TXT["Enter state of month:"]
  1721.    _EINGABE[23]
  1722.    M=Val(XFILE$)
  1723.    '
  1724.    _TXT["Enter state of year.:"]
  1725.    _EINGABE[23]
  1726.    H=Val(XFILE$)
  1727.    '
  1728.    If S<32 and S>0 and M<13 and M>0 and H>1581 and H<2001 Then Else _TXT["Please use this format: DD.MM.YYYY  <Year min. 1582 - Year max. 2000> !"] : Pop Proc
  1729.    '
  1730.    For I=X-1 To H Step -1
  1731.       If I mod 400=0 or I mod 4=0
  1732.          Add Y,-2 : I2=1
  1733.       Else 
  1734.          Dec Y : I2=0
  1735.       End If 
  1736.       If I mod 100=0 and I mod 400<>0 Then Inc Y : I2=0
  1737.       If Y<1 Then Add Y,7
  1738.    Next I
  1739.    '
  1740.    Restore MT
  1741.    '
  1742.    For I=1 To M-1
  1743.       Read A
  1744.       Add N,A
  1745.    Next I
  1746.    '
  1747.    Add N,S-1
  1748.    If I2=1 and M>2 Then Inc N
  1749.    Add Y,(N mod 7) : If Y>7 Then Add Y,-7
  1750.    If I2=0 and M=2 and S>28 : _TXT["The date of "+Str$(S)-" "+"."+Str$(M)-" "+"."+Str$(H)-" "+" doesn`t exist !"] : Pop Proc : End If 
  1751.    Restore WT
  1752.    For I=1 To Y : Read N$ : Next I
  1753.    _TXT["The day of "+Str$(S)-" "+"."+Str$(M)-" "+"."+Str$(H)-" "+" is a "+N$]
  1754.    '
  1755. MT: Data 31,28,31,30,31,30,31,31,30,31,30,31
  1756. WT: Data "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"
  1757. End Proc
  1758. Procedure _OPENWB
  1759.    LVOOPENWORKBENCH=Intcall(-210)
  1760.    If LVOOPENWORKBENCH=0
  1761.       _TXT["Can`t open Workbench, not enough memory"]
  1762.    Else 
  1763.       _TXT["Workbench is opened !"]
  1764.    End If 
  1765. End Proc
  1766. Procedure _CLOSEWB
  1767.    LVOCLOSEWORKBENCH=Intcall(-78)
  1768.    If LVOCLOSEWORKBENCH=0
  1769.       _TXT["Can`t close Workbench !"]
  1770.    Else 
  1771.       _TXT["Workbench is closed !"]
  1772.    End If 
  1773. End Proc
  1774. Procedure _CLOSE
  1775.    _TXT["Press left AMIGA + A to come back to AmBOS !"]
  1776.    Wait 90
  1777.    Amos To Back 
  1778.    Screen Close 0
  1779.    Repeat 
  1780.       Multi Wait 
  1781.    Until Amos Here
  1782.    _INSTALLAMBOS
  1783.    _INSTALLSCREEN
  1784. End Proc
  1785. Procedure _ABOUT
  1786.    Wait 20
  1787.    Ink 0 : Bar 0,15 To 640,222
  1788.    For I=1 To 18
  1789.       Read Y,N$
  1790.       X=Text Length(N$)
  1791.       If X<97 Then Ink 2 Else Ink 1
  1792.       Text 320-X/2,Y,N$
  1793.    Next I
  1794.    While Asc(Inkey$)=0 and Mouse Key=0 : Wend 
  1795.    _INSTALLSCREEN
  1796. Data 22,"About"
  1797. Data 33,"AmBOS V2.0b is written in AMOS V1.31 and compiled with ACmp V1.0 !"
  1798. Data 49,"Greatings to"
  1799. Data 60,"Frank, Jork, Karsten, Silke, Halime, Ursel, Melanie, Hermann, Momo"
  1800. Data 68,"Jens (Falderi Faldera), Axel, Detlef (Wurzelsepp), Richy, Christina"
  1801. Data 76,"Anja, Jennifer, Giofranco, Wolli, Bernd (Bänger), Jesus, Robbi, Sonja"
  1802. Data 84,"Jaquline, Jörg, Fracois, and last but not least Big Humphrey the rabbit"
  1803. Data 100,"Thanx"
  1804. Data 111,"`Kaffee KrÜmmel' and `Rocknacht' for its great atmosphere !"
  1805. Data 119,"`Al Bundy and the rest' for being so incredible cool, cool, cool !"
  1806. Data 135,"Important"
  1807. Data 146,"If you found some bugs or have some good ideas and you are able to"
  1808. Data 154,"program in AMOS, so you can change it like you need it !  The only"
  1809. Data 162,"I beg for is to send me the latest update of the new version of AmBOS."
  1810. Data 179,"Write to"
  1811. Data 190,"Volker Stepprath, Spandauerstrasse 4, 40789 Monheim, Germany"
  1812. Data 206,"PS"
  1813. Data 217,"Press the Help key and one menuoption to explain it !"
  1814. End Proc
  1815. Procedure _EDITOR
  1816.    On Error Goto _FEHLER
  1817.    If XSD=0
  1818.       A$=XDISKNAMEA$
  1819.       B$=XDISKNAMEB$
  1820.       A=XANZA#
  1821.    Else 
  1822.       A$=XDISKNAMEB$
  1823.       B$=XDISKNAMEA$
  1824.       A=XANZB#
  1825.    End If 
  1826.    For I=0 To A
  1827.       If XSD=0
  1828.          N$=XDIRA$(I)
  1829.          N=XSTATUSA(I)
  1830.       Else 
  1831.          N$=XDIRB$(I)
  1832.          N=XSTATUSB(I)
  1833.       End If 
  1834.       If N=-2 Then Pop Proc
  1835.       If N=1 and Instr(N$,"[DIR]")=0
  1836.          FGR=Val(Right$(N$,8))
  1837.          _REALNAME[N$]
  1838.          NF$=XFILE$
  1839.          Reserve As Data 7,FGR
  1840.          If XE : Pop Proc : End If 
  1841.          Bload A$+NF$,7
  1842.          If XE
  1843.             Erase 7
  1844.             Pop Proc
  1845.          End If 
  1846.          _EDIT[B$,NF$,FGR]
  1847.          Erase 7
  1848.          I2=True
  1849.       End If 
  1850.    Next I
  1851.    If I2=False
  1852.       FGR=1920
  1853.       NF$="NoNamed"
  1854.       Reserve As Data 7,1920
  1855.       _EDIT[B$,NF$,FGR]
  1856.       Erase 7
  1857.    End If 
  1858.    '
  1859.    _INSTALLSCREEN
  1860.    If XSD=0 Then _CLEAR[0] Else _CLEAR[1]
  1861. Pop Proc
  1862. '
  1863. _FEHLER:
  1864.    XE=Errn
  1865.    _ERROR[XE]
  1866. Resume Next 
  1867. End Proc
  1868. Procedure _DISKCOPY
  1869.    _TXT["Sourcedrive (0-3):"]
  1870.    _EINGABE[20]
  1871.    XSOURCE=Abs(Val(XFILE$))
  1872.    N0$="DF"+Str$(XSOURCE)-" "+":"
  1873.    If Drive(N0$)=0
  1874.       _TXT[N0$+" not available !"]
  1875.       Pop Proc
  1876.    End If 
  1877.    '
  1878.    _TXT["Targetdrive (0-3):"]
  1879.    _EINGABE[20]
  1880.    XTARGET=Abs(Val(XFILE$))
  1881.    N1$="DF"+Str$(XTARGET)-" "+":"
  1882.    If Drive(N1$)=0
  1883.       _TXT[N1$+" not available !"]
  1884.       Pop Proc
  1885.    End If 
  1886.    '
  1887.    If XSOURCE=XTARGET
  1888.       _TXT["Sourcedrive & Targetdrive must be different !"]
  1889.       Pop Proc
  1890.    End If 
  1891.    '
  1892.    _TXT["Insert sourcedisk in drive "+N0$+" !"]
  1893.    _TXT["Insert targetdisk in drive "+N1$+" !"]
  1894.    _TXT["Press any key to start diskcopy <ESC = Abort> !"]
  1895.    Repeat 
  1896.       N=Asc(Inkey$)
  1897.    Until N
  1898.    If N=27 Then _TXT["Diskcopy aborted !"] : Pop Proc
  1899.    _TXT[""]
  1900.    '    
  1901.    Reserve As Chip Data 7,5632
  1902.    DISKREP$=Space$(40)+Chr$(0)
  1903.    DEVNAME$="trackdisk.device"+Chr$(0)
  1904.    DISKREP=Varptr(DISKREP$)
  1905.    IOREQ$=Space$(80)+Chr$(0)
  1906.    IOREQADR=Varptr(IOREQ$)
  1907.    IOREQ2$=Space$(80)+Chr$(0)
  1908.    IOREQADR2=Varptr(IOREQ2$)
  1909.    Areg(0)=0
  1910.    Areg(1)=0
  1911.    Dreg(0)=0
  1912.    Dreg(1)=0
  1913.    LVOFINDTASK=Execall(-294)
  1914.    Loke DISKREP+$10,LVOFINDTASK
  1915.    Areg(0)=Varptr(DEVNAME$)
  1916.    '
  1917.    Areg(1)=IOREQADR
  1918.    Dreg(0)=XSOURCE
  1919.    LVOOPENDEVICE=Execall(-444)
  1920.    '
  1921.    Areg(1)=IOREQADR2
  1922.    Dreg(0)=XTARGET
  1923.    LVOOPENDEVICE=Execall(-444)
  1924.    '
  1925.    Loke IOREQADR+14,DISKREP
  1926.    Doke IOREQADR+28,2
  1927.    Loke IOREQADR+36,5632
  1928.    Loke IOREQADR+40,Start(7)
  1929.    Loke IOREQADR2+14,DISKREP
  1930.    Doke IOREQADR2+28,11
  1931.    Loke IOREQADR2+36,5632
  1932.    Loke IOREQADR2+40,Start(7)
  1933.    '
  1934.    Gosub _DISKCOPY
  1935.    '
  1936.    Areg(1)=IOREQADR
  1937.    Doke IOREQADR+28,9
  1938.    Loke IOREQADR+36,0
  1939.    LVODOIO=Execall(-456)
  1940.    '
  1941.    Areg(1)=IOREQADR2
  1942.    Doke IOREQADR2+28,9
  1943.    Loke IOREQADR2+36,0
  1944.    LVODOIO=Execall(-456)
  1945.    '
  1946.    Areg(1)=IOREQADR
  1947.    LVOCLOSEDEVICE=Execall(-450)
  1948.    Areg(1)=IOREQADR2
  1949.    LVOCLOSEDEVICE=Execall(-450)
  1950.    '
  1951.    Erase 7
  1952. Pop Proc
  1953. '
  1954. _DISKCOPY:
  1955.    For TRACK=0 To 159
  1956.       Text 22,250,"Reading cylinder #"+Str$(I)-" "+" , head"+Str$(I2)+" !"
  1957.       Areg(1)=IOREQADR
  1958.       Loke IOREQADR+44,TRACK*5632
  1959.       LVODOIO=Execall(-456)
  1960.       If LVODOIO=29
  1961.          _TXT["No disk in drive "+N0$+" !"]
  1962.          Return 
  1963.       End If 
  1964.       If LVODOIO<>0
  1965.          Text 22,250,"TDERR #"+Str$(LVODOIO)-" "+" occured while reading cylinder #"+Str$(I)-" "+" , head"+Str$(I2)+" !"
  1966.          _TXT[""]
  1967.       End If 
  1968.       '
  1969.       Text 22,250,"Writing cylinder #"+Str$(I)-" "+" , head"+Str$(I2)+" !"
  1970.       Areg(1)=IOREQADR2
  1971.       Loke IOREQADR2+44,TRACK*5632
  1972.       LVODOIO=Execall(-456)
  1973.       If LVODOIO=28
  1974.          _TXT["Disk in drive "+N1$+" is write protected !"]
  1975.          Return 
  1976.       End If 
  1977.       If LVODOIO=29
  1978.          _TXT["No disk in drive "+N1$+" !"]
  1979.          Return 
  1980.       End If 
  1981.       '    
  1982.       If Asc(Inkey$)=27
  1983.          _TXT["Diskcopy aborted !"]
  1984.          Return 
  1985.       End If 
  1986.       '
  1987.       Add I,I2
  1988.       Add I2,1,0 To 1
  1989.    Next TRACK
  1990.    _TXT["Diskcopy finished !"]
  1991. Return 
  1992. End Proc
  1993. Procedure _FORMAT
  1994.    _DISKIT[1]
  1995. End Proc
  1996. Procedure _VERIFY
  1997.    _DISKIT[5]
  1998. End Proc
  1999. Procedure _INSTALL
  2000.    _DISKIT[2]
  2001. End Proc
  2002. Procedure _BLKDAT
  2003.    _DISKIT[3]
  2004. End Proc
  2005. Procedure _DATBLK
  2006.    _DISKIT[4]
  2007. End Proc
  2008. Procedure _EXIT
  2009.    If Exist("SYS:") Then Dir$="SYS:"
  2010.    Request On 
  2011.    Wait 30
  2012.    End 
  2013. End Proc
  2014. '
  2015. '**** MenÜ D 
  2016. Procedure _CREATE
  2017.    On Error Goto _FEHLER
  2018.    Do 
  2019.       _TXT["Select gadget for new command <CREATE=Save/Abort>"]
  2020.       Repeat : Until Mouse Key=0
  2021.       While Mouse Key=0 : Wend 
  2022.       X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  2023.       '
  2024.       If Y>194 and Y<208
  2025.          X=X/80 : Y=195
  2026.          _G[X*80+1,195,X*80+78,207,1]
  2027.       End If 
  2028.       If X<558 and Y>209 and Y<223
  2029.          X=X/80 : Y=210
  2030.          _G[X*80+1,210,X*80+78,222,1]
  2031.          Add X,8
  2032.       End If 
  2033.       '
  2034.       If X>13 and Y>209 and Y<223 Then Clear Key : Exit 
  2035.       I2=True
  2036.       '
  2037.       Ink 1 : _TXT["Enter menuname:"]
  2038.       _EINGABE[17]
  2039.       N$=XFILE$
  2040.       Ink 1 : _TXT["Enter commandline:"]
  2041.       _EINGABE[20]
  2042.       N$=N$+"="+XFILE$
  2043.       If N$="=" Then N$=""
  2044.       For I=0 To 31 : N$=N$-Chr$(I) : Next I
  2045.       XMEND$(X)=N$
  2046.       '
  2047.       _MENU[3]
  2048.       If X>7 Then Add X,-8
  2049.       _G[X*80+1,Y,X*80+78,Y+12,0]
  2050.    Loop 
  2051.    '
  2052.    If I2
  2053.       If Exist("SYS:S/")
  2054.          Open Out 1,"SYS:S/.ambosmenu"
  2055.             If XE : Pop Proc : End If 
  2056.             For I=0 To 13
  2057.                Print #1,XMEND$(I)
  2058.             Next I
  2059.          Close 1
  2060.       Else 
  2061.          _TXT["SYS:S/ not available !"]
  2062.       End If 
  2063.    End If 
  2064. Pop Proc
  2065. '
  2066. _FEHLER:
  2067.    XE=Errn
  2068.    _ERROR[XE]
  2069.    Resume Next 
  2070. End Proc
  2071. '
  2072. '**** Unterfunktionen
  2073. Procedure _ALL[N]
  2074.    If N=0
  2075.       For I=0 To XANZA#
  2076.          If XSTATUSA(I)<>-2 : XSTATUSA(I)=1 : End If 
  2077.       Next I
  2078.       _SHOWDIR[0]
  2079.    Else 
  2080.       For I=0 To XANZB#
  2081.          If XSTATUSB(I)<>-2 : XSTATUSB(I)=1 : End If 
  2082.       Next I
  2083.       _SHOWDIR[1]
  2084.    End If 
  2085. End Proc
  2086. Procedure _CALLCOMMAND[N]
  2087.    Wait 15
  2088.    N$=XMEND$(N)
  2089.    If N$="" Then Pop Proc
  2090.    If N$="CREATE=" Then _CREATE : Pop Proc
  2091.    N=Instr(N$,"=")
  2092.    N$=Mid$(N$,N+1,Len(N$)-N)+Chr$(0)
  2093.    XFILE$=N$
  2094.    _RUN
  2095. End Proc
  2096. Procedure _CLEAR[N]
  2097.    If N=0
  2098.       For I=0 To XANZA#
  2099.          If XSTATUSA(I)<>-2 : XSTATUSA(I)=0 : End If 
  2100.       Next I
  2101.       _SHOWDIR[0]
  2102.    Else 
  2103.       For I=0 To XANZB#
  2104.          If XSTATUSB(I)<>-2 : XSTATUSB(I)=0 : End If 
  2105.       Next I
  2106.       _SHOWDIR[1]
  2107.    End If 
  2108. End Proc
  2109. Procedure _DISKIT[N]
  2110.    If XSD=0 Then B$=XDISKNAMEB$ : A=XANZB# Else B$=XDISKNAMEA$ : A=XANZA#
  2111.    '
  2112.    On Error Goto _FEHLER
  2113.    '
  2114.    If N<3
  2115.       _TXT["Targetdrive (0-3):"]
  2116.       _EINGABE[20]
  2117.       XTARGET=Abs(Val(XFILE$))
  2118.       N1$="DF"+Str$(XTARGET)-" "+":"
  2119.       If Drive(N1$)=0
  2120.          _TXT[N1$+" not available !"]
  2121.          Pop Proc
  2122.       End If 
  2123.    End If 
  2124.    '
  2125.    If N=1
  2126.       _TXT["Insert targetdisk in drive "+N1$+" !"]
  2127.       _TXT["Press any key when ready <ESC = Abort> !"]
  2128.       Repeat 
  2129.          N0=Asc(Inkey$)
  2130.       Until N0
  2131.       If N0=27
  2132.          _TXT["Process aborted !"]
  2133.          Pop Proc
  2134.       End If 
  2135.    End If 
  2136.    '
  2137.    If N=3
  2138.       _TXT["Sourcedrive (0-3):"]
  2139.       _EINGABE[20]
  2140.       XTARGET=Abs(Val(XFILE$))
  2141.       N0$="DF"+Str$(XTARGET)-" "+":"
  2142.       If Drive(N0$)=0
  2143.          _TXT[N0$+" not available !"]
  2144.          Pop Proc
  2145.       End If 
  2146.       _TXT["Startblock (0-1758):"]
  2147.       _EINGABE[22]
  2148.       N0=Abs(Val(XFILE$))
  2149.       N0=Min(1758,N0)
  2150.       _TXT["Endblock ("+Str$(N0)-" "+"-1759):"]
  2151.       _EINGABE[18+Len(Str$(N0))]
  2152.       N1=Abs(Val(XFILE$))
  2153.       N1=Min(1759,N1)
  2154.       If N0>N1 : Swap N0,N1 : End If 
  2155.       _TXT["Filename:"]
  2156.       _EINGABE[11]
  2157.       If XFILE$=""
  2158.          _TXT["Block to file aborted !"]
  2159.          Pop Proc
  2160.       End If 
  2161.    End If 
  2162.    '
  2163.    If N=4
  2164.       If XSD=0
  2165.          B$=XDISKNAMEA$
  2166.          A=XANZA#
  2167.       Else 
  2168.          B$=XDISKNAMEB$
  2169.          A=XANZB#
  2170.       End If 
  2171.       '
  2172.       For I=0 To A
  2173.          If XSD=0
  2174.             N$=XDIRA$(I)
  2175.             B=XSTATUSA(I)
  2176.          Else 
  2177.             N$=XDIRB$(I)
  2178.             B=XSTATUSB(I)
  2179.          End If 
  2180.          If B=-2
  2181.             Pop Proc
  2182.          End If 
  2183.          If B=1 and Instr(N$,"[DIR]")=0
  2184.             FGR=Val(Right$(N$,8))
  2185.             _REALNAME[N$]
  2186.             N$=B$+XFILE$
  2187.             I=A
  2188.          End If 
  2189.       Next I
  2190.       If B=0
  2191.          _TXT["No file selected !"]
  2192.          Pop Proc
  2193.       End If 
  2194.       _TXT["Targetdrive (0-3):"]
  2195.       _EINGABE[20]
  2196.       XTARGET=Abs(Val(XFILE$))
  2197.       N0$="DF"+Str$(XTARGET)-" "+":"
  2198.       If Drive(N0$)=0
  2199.          _TXT[N0$+" not available !"]
  2200.          Pop Proc
  2201.       End If 
  2202.       _TXT[N$+" to block (0-1759):"]
  2203.       _EINGABE[21+Len(N$)]
  2204.       N0=Abs(Val(XFILE$))
  2205.       N0=Min(1759,N0)
  2206.    End If 
  2207.    '
  2208.    If N=5
  2209.       _TXT["Sourcedrive (0-3):"]
  2210.       _EINGABE[20]
  2211.       XTARGET=Abs(Val(XFILE$))
  2212.       N0$="DF"+Str$(XTARGET)-" "+":"
  2213.       If Drive(N0$)=0
  2214.          _TXT[N0$+" not available !"]
  2215.          Pop Proc
  2216.       End If 
  2217.    End If 
  2218.    '
  2219.    Reserve As Chip Data 7,5632
  2220.    DISKREP$=Space$(40)+Chr$(0)
  2221.    DEVNAME$="trackdisk.device"+Chr$(0)
  2222.    IOREQ$=Space$(80)+Chr$(0)
  2223.    DISKREP=Varptr(DISKREP$)
  2224.    IOREQADR=Varptr(IOREQ$)
  2225.    Areg(0)=0
  2226.    Areg(1)=0
  2227.    Dreg(0)=0
  2228.    Dreg(1)=0
  2229.    XFINDTASK=Execall(-294)
  2230.    Loke DISKREP+$10,XFINDTASK
  2231.    Areg(0)=Varptr(DEVNAME$)
  2232.    Areg(1)=IOREQADR
  2233.    Dreg(0)=XTARGET
  2234.    Dreg(1)=0
  2235.    LVOOPENDEVICE=Execall(-444)
  2236.    '
  2237.    Loke IOREQADR+14,DISKREP
  2238.    Loke IOREQADR+40,Start(7)
  2239.    Doke IOREQADR+28,11
  2240.    Loke IOREQADR+36,5632
  2241.    '
  2242.    On N Gosub _FORMAT,_INSTALL,_BLKDAT,_DATBLK,_VERIFY
  2243.    '
  2244.    Doke IOREQADR+28,9
  2245.    Loke IOREQADR+36,0
  2246.    LVODOIO=Execall(-456)
  2247.    LVOCLOSEDEVICE=Execall(-450)
  2248.    '
  2249.    Erase 7
  2250. Pop Proc
  2251. '
  2252. _FORMAT:
  2253.    _TXT[""]
  2254.    For TRACK=0 To 159
  2255.       Text 22,250,"Formatting cylinder #"+Str$(I)-" "+" , head"+Str$(I2)+" !"
  2256.       Loke IOREQADR+44,TRACK*5632
  2257.       LVODOIO=Execall(-456)
  2258.       If LVODOIO
  2259.          _TXT["TDERR #"+Str$(LVODOIO)+" occured !"]
  2260.          Return 
  2261.       End If 
  2262.       If Asc(Inkey$)=27 Then _TXT["Format aborted !"] : Return 
  2263.       Add I,I2
  2264.       Add I2,1,0 To 1
  2265.    Next TRACK
  2266.    N=Start(7)
  2267.    For I=$204 To $2DF
  2268.       Poke N+I,$FF
  2269.    Next I
  2270.    Doke N+2,$2
  2271.    Poke N+15,$48
  2272.    Loke N+20,$A661AEF3
  2273.    Doke N+$13A,$1
  2274.    Doke N+$13E,$371
  2275.    Poke N+$1B0,$5
  2276.    Poke N+$1B1,$45
  2277.    Poke N+$1B2,$4D
  2278.    Poke N+$1B3,$50
  2279.    Poke N+$1B4,$54
  2280.    Poke N+$1B5,$59
  2281.    Poke N+$1FF,$1
  2282.    Loke N+$200,$C000C037
  2283.    Poke N+$272,$3F
  2284.    Poke N+$2DC,$3F
  2285.    Doke IOREQADR+28,11
  2286.    Loke IOREQADR+44,$6E000
  2287.    LVODOIO=Execall(-456)
  2288.    Gosub _INSTALLII
  2289.    _TXT["Please remove disk to inform validator !"]
  2290. Return 
  2291. '
  2292. _INSTALL:
  2293.    _TXT["What bootblock ?"]
  2294.    _TXT["[N]oBoot / [D]osBoot / [Q]uartexBoot:"]
  2295.    _EINGABE[39]
  2296.    N$=Upper$(XFILE$)
  2297.    If N$="" Then _TXT["Install aborted !"] : Return 
  2298. _INSTALLII:
  2299.    If N$<>"N" and(N$<>"Q") Then N$="D"
  2300.    For I=0 To 1024 : Poke Start(7)+I,0 : Next I
  2301.    If N$="N"
  2302.       Read N : Loke Start(7),N
  2303.    End If 
  2304.    If N$="D"
  2305.       Restore _DOSBOOT
  2306.       For I=0 To 12 : Read N : Loke Start(7)+I*4,N : Next I
  2307.    End If 
  2308.    If N$="Q"
  2309.       Restore _QUARTEXBOOT
  2310.       For I=0 To 255 : Read N : Loke Start(7)+I*4,N : Next I
  2311.    End If 
  2312.    '
  2313.    Doke IOREQADR+28,3
  2314.    Loke IOREQADR+36,1024
  2315.    Loke IOREQADR+44,0
  2316.    LVODOIO=Execall(-456)
  2317.    Doke IOREQADR+28,4
  2318.    LVODOIO=Execall(-456)
  2319.    If LVODOIO<>0 Then _TXT["TDERR #"+Str$(LVODOIO)-" "+" occured !"]
  2320. Return 
  2321. '
  2322. _BLKDAT:
  2323.    Open Out 1,B$+XFILE$
  2324.       If XE Then Return 
  2325.    Close 1
  2326.    Doke IOREQADR+28,2
  2327.    Loke IOREQADR+36,512
  2328.    N$=B$+XFILE$+Chr$(0)
  2329.    Dreg(1)=Varptr(N$)
  2330.    Dreg(2)=1006
  2331.    LVOOPEN=Doscall(-30)
  2332.    _TXT["Working block:"]
  2333.    For I=N0 To N1
  2334.       Text 134,250,Str$(I)
  2335.       Loke IOREQADR+44,I*512
  2336.       LVODOIO=Execall(-456)
  2337.       If LVODOIO<>0
  2338.          _TXT["TDERR #"+Str$(LVODOIO)-" "+" occured !"]
  2339.          I=N1
  2340.       End If 
  2341.       Dreg(1)=LVOOPEN
  2342.       Dreg(2)=Start(7)
  2343.       Dreg(3)=512
  2344.       LVOWRITE=Doscall(-48)
  2345.       If LVOWRITE<>512
  2346.          _TXT["DOS error occured !"]
  2347.          I=N1
  2348.       End If 
  2349.    Next I
  2350.    Dreg(1)=LVOOPEN
  2351.    LVOCLOSE=Doscall(-36)
  2352.    If XSD=0
  2353.       _LESEDISK[B$,1]
  2354.    Else 
  2355.       _LESEDISK[B$,0]
  2356.    End If 
  2357. Return 
  2358. '
  2359. _DATBLK:
  2360.    Open In 1,N$
  2361.       If XE Then Return 
  2362.    Close 1
  2363.    _TXT["Blocks used: 0"]
  2364.    _TXT["Installed..: 0%   ( 0 bytes )"]
  2365.    N$=N$+Chr$(0)
  2366.    Dreg(1)=Varptr(N$)
  2367.    Dreg(2)=1005
  2368.    LVOOPEN=Doscall(-30)
  2369.    Dreg(1)=LVOOPEN
  2370.    Dreg(2)=Start(7)
  2371.    Dreg(3)=512
  2372.    Loke IOREQADR+36,512
  2373.    For I=0 To FGR Step 512
  2374.       LVOREAD=Doscall(-42)
  2375.       Doke IOREQADR+28,3
  2376.       Loke IOREQADR+44,N0*512+I
  2377.       LVODOIO=Execall(-456)
  2378.       If LVODOIO<>0
  2379.          _TXT["TDERR #"+Str$(LVODOIO)-" "+" occured !"]
  2380.          I=FGR
  2381.       Else 
  2382.          Text 118,242,Str$(I/512)
  2383.          Text 118,250,Str$(100.0/FGR*(I+LVOREAD))+"%"+"   ("+Str$(I+LVOREAD)+" bytes )"
  2384.       End If 
  2385.       If LVOREAD<512 Then I=FGR
  2386.       If Asc(Inkey$)=27 Then I=FGR
  2387.    Next I
  2388.    Doke IOREQADR+28,4
  2389.    LVODOIO=Execall(-456)
  2390.    Dreg(1)=LVOOPEN
  2391.    LVOCLOSE=Doscall(-36)
  2392. Return 
  2393. '
  2394. _VERIFY:
  2395.    _TXT[""]
  2396.    Doke IOREQADR+28,2
  2397.    For TRACK=0 To 159
  2398.       Text 22,250,"Verifying cylinder #"+Str$(I)-" "+" , head"+Str$(I2)+" !"
  2399.       If Asc(Inkey$)=27 Then _TXT["Verify aborted !"] : Return 
  2400.       Loke IOREQADR+44,TRACK*5632
  2401.       LVODOIO=Execall(-456)
  2402.       If LVODOIO=29 Then _TXT["No disk in drive !"] : Return 
  2403.       If LVODOIO<>0
  2404.          Text 22,250,"TDERR #"+Str$(LVODOIO)-" "+" on cylinder #"+Str$(I)-" "+" , head"+Str$(I2)+" !"
  2405.          If I<79 : _TXT[""] : End If 
  2406.          Inc I3
  2407.       End If 
  2408.       Add I,I2
  2409.       Add I2,1,0 To 1
  2410.    Next TRACK
  2411.    _TXT["# of diskerrors:"+Str$(I3)+" !"]
  2412. Return 
  2413. '
  2414. _NOBOOT:
  2415. Data $444F5300
  2416. _DOSBOOT:
  2417. Data $444F5300,$C0200F19,$370,$43FA0018,$4EAEFFA0,$4A80670A,$20402068
  2418. Data $167000,$4E7570FF,$60FA646F,$732E6C69,$62726172,$79000000
  2419. _QUARTEXBOOT:
  2420. Data $444F5300,$1C2238A9,$370,$48E7FF7E,$70026100,$22E7009,$42A90024
  2421. Data $6100023A,$41FA03CC,$22690014,$20A9003C,$22690038,$2F0943FA,$2B8303C
  2422. Data $4E20222E,$3E0481,$80004,$6B043340,$1E4AAE,$4E6704,$3340000A
  2423. Data $43FA02B6,$207A0394,$41E80034,$4A986604,$33400008,$4A986604,$33400012
  2424. Data $4A986604,$3340001C,$4AAE002A,$660C4AAE,$2E6606,$4AAE022A,$671A43FA
  2425. Data $3237020,$1340001A,$12C012BC,$4145FA,$2D424FC,$56495249,$43F90007
  2426. Data $80002449,$4299B3FC,$7F000,$66F62C57,$33FC01A0,$DFF096,$43FA01CE
  2427. Data $2D490032,$41F90007,$1000214A,$87001,$223C0000,$300243C,$100
  2428. Data $4EAEFE7A,$43F90007,$11004EAE,$FF3A43F9,$71100,$237C0007,$10000004
  2429. Data $70014EAE,$FEAA4BFA,$1C87800,$7632181D,$672E610E,$6830000,$1806106
  2430. Data $4BED001F,$60E843F9,$71100,$20032204,$4EAEFF10,$43F90007,$1100204D
  2431. Data $701F4EAE,$FFC44E75,$33FC8380,$DFF096,$283C000F,$F0002C78,$45384
  2432. Data $670000B8,$43FA025A,$C110041,$661243FA,$1663011,$2400F00,$6400100
  2433. Data $32805284,$4BF900BF,$E0010815,$66700,$8E102D,$C00422D,$C004600
  2434. Data $B03C00A0,$670000D4,$B03C00A2,$660A203C,$80000,$600000C8,$B03C00A4
  2435. Data $66164BF9,$FC00D0,$42AE0026,$4EAEFFE2,$41F80002,$4E704ED0,$B03C00A6
  2436. Data $6738B03C,$A86606,$4BFAFFEA,$60DEB03C,$AA6756,$B03C00AC,$66040855
  2437. Data $1B03C,$AE6612,$47FA020C,$32130841,$53681,$33C100DF,$F1DC6000
  2438. Data $FF52207A,$1F241E8,$3470FF,$20C020C0,$20806112,$43FA01E6,$4EAEFFA0
  2439. Data $20402068,$167000,$4E75205F,$588F4CDF,$7EFF2F08,$4E7561F2,$700541F9
  2440. Data $50000,$610C7003,$61087004,$61046000,$FDCC41F9,$30000,$23480028
  2441. Data $237C0000,$4000024,$42A9002C,$3340001C,$4EAEFE38,$4E75202E,$3E204E
  2442. Data $4BF900FC,$2800C65,$21FC66FA,$99CC4DF8,$6762640,$43F900DF,$F096203C
  2443. Data $7FFF7FFF,$22C022C0,$4EE8FFE2,$1002200,$1020001,$920020,$9400D8
  2444. Data $8E3000,$9030FF,$E00007,$E28870,$E40007,$E688A0,$1860AAA
  2445. Data $1840EEE,$1820777,$1800002,$FFFFFFFE,$223C3C3C,$3C3C3C20,$5554494C
  2446. Data $49545920,$424F4F54,$2056322E,$30203E3E,$3E3E3E3E,$35464153,$544D454D
  2447. Data $3A4F4646,$20202020,$20203120,$4D454720,$43484950,$3A4F4646,$2C202044
  2448. Data $46313A4F,$46462020,$20444632,$3A4F4646,$20202044,$46333A4F,$46462020
  2449. Data $43463120,$46415354,$4D454D20,$4F464620,$46322043,$4849502F,$46415354
  2450. Data $204F4646,$4C463320,$414C4C20,$4D454D20,$4F4E2020,$4634204B,$494C4C20
  2451. Data $44524956,$45532120,$55463520,$48415244,$20524553,$45542020,$46362049
  2452. Data $4E535441,$4C4C2042,$4F4F5420,$5E463720,$544F4747,$4C45204C,$45442020
  2453. Data $46382054,$4F472050,$414C2F4E,$54534320,$6C20204E,$4F205649,$52555320
  2454. Data $48415320,$4245454E,$20444554,$45435445,$44212020,$75424F4F,$54204259
  2455. Data $20204E2E,$4F2E4D2E,$412E4420,$204F4620,$51554152,$54455821,$0
  2456. Data $0,$646F732E,$6C696272,$61727900
  2457. '
  2458. _FEHLER:
  2459.    XE=Errn
  2460.    _ERROR[XE]
  2461. Resume Next 
  2462. End Proc
  2463. Procedure _DPROTECT
  2464.    If XSD=0 Then DEV$=XDISKNAMEB$ Else DEV$=XDISKNAMEA$
  2465.    '
  2466.    XPROTECT=0
  2467.    If DEV$="" Then _TXT["No drive selected !"] : Pop Proc
  2468.    If Not Exist(DEV$) Then _TXT[DEV$+" not available !"] : Pop Proc
  2469.    '
  2470.    Dir$=DEV$
  2471.    DEV$=Dir$
  2472.    DEV$=DEV$+Chr$(0)
  2473.    Repeat 
  2474.       INFO$=Space$(40)+Chr$(0)
  2475.       IN=Varptr(INFO$)
  2476.       Dreg(1)=Varptr(DEV$)
  2477.       Dreg(2)=-2
  2478.       LVOLOCK=Doscall(-84)
  2479.       Dreg(1)=LVOLOCK
  2480.       Dreg(2)=IN
  2481.       LVOINFO=Doscall(-114)
  2482.       LVOUNLOCK=Doscall(-90)
  2483.    Until Leek(IN+8)<84
  2484.    '
  2485.    XPROTECT=Leek(IN+8)
  2486.    If XPROTECT=80 Then _TXT["Disk is write protected !"]
  2487.    If XPROTECT=81 Then _TXT["Error occured... disk is not validated !"]
  2488. End Proc
  2489. Procedure _EDIT[B$,NF$,FGR]
  2490.    On Error Goto _FEHLER
  2491.    FGR2=FGR/80
  2492.    HELP$="Name: "+NF$+"     Size:"+Str$(FGR)+"     Lines max:"+Str$(FGR2)
  2493.    _TXT[HELP$]
  2494.    Ink 0 : Bar 0,15 To 640,223
  2495.    Ink 1
  2496.    Text 7,219,"Asc: 000   Hex: $00   Line: 00000   Pos: 000000   Search   Save as   ?   Abort"
  2497.    Gosub _G0
  2498.    Gosub _SHOW
  2499.    '
  2500.    Do 
  2501.       A$=Inkey$
  2502.       MK=Mouse Key
  2503.       If A$<>"" Then Gosub _TASTE
  2504.       If MK<>0
  2505.          Gosub _MAUS
  2506.          Gosub _G0
  2507.       End If 
  2508.    Loop 
  2509.    '
  2510. _TASTE:
  2511.    N=Asc(A$)
  2512.    If N=13 and I4<FGR2
  2513.       Add I3,1920
  2514.       I3=Min(I3,FGR-80)
  2515.       I3=Max(0,I3)
  2516.       If I4<FGR2 : Gosub _SHOW : End If 
  2517.       Clear Key 
  2518.       Return 
  2519.    End If 
  2520.    If N=27
  2521.       I3=Max(0,I3-1920)
  2522.       I4=Max(0,I4-48)
  2523.       Gosub _SHOW
  2524.       Clear Key 
  2525.       Return 
  2526.    End If 
  2527.    If N>27 and N<32 Then Gosub _ASCHEX : Return 
  2528.    If N>31 Then Gosub _POKE : Clear Key 
  2529. Return 
  2530. '
  2531. _MAUS:
  2532.    X=X Screen(X Mouse) : Y=Y Screen(Y Mouse)
  2533.    If Y>209 and Y<223
  2534.       If X>174 and X<278
  2535.          _G[175,210,277,222,1]
  2536.          _TXT["Enter linenumber:"]
  2537.          _EINGABE[19]
  2538.          I4=Abs(Val(XFILE$))
  2539.          I4=Min(I4,FGR2)
  2540.          I3=I4*80
  2541.          Gosub _SHOW
  2542.       End If 
  2543.       If X<81
  2544.          _G[0,210,80,222,1]
  2545.          _TXT["Enter ASCII value:"]
  2546.          _EINGABE[20]
  2547.          N=Min(255,Abs(Val(XFILE$)))
  2548.          Gosub _POKE
  2549.       End If 
  2550.       If X>87 and X<167
  2551.          _G[88,210,166,222,1]
  2552.          _TXT["Enter HEX value: $"]
  2553.          _EINGABE[19]
  2554.          XFILE$=Left$(XFILE$,2)
  2555.          XFILE$=Upper$(XFILE$)
  2556.          N=Val("$"+XFILE$)
  2557.          Gosub _POKE
  2558.       End If 
  2559.       If X>285 and X<391
  2560.          _G[286,210,390,222,1]
  2561.          _TXT["Enter position:"]
  2562.          _EINGABE[17]
  2563.          N=Min(FGR-1,Abs(Val(XFILE$)))
  2564.          CX=N mod 80
  2565.          I4=N/80
  2566.          I3=I4*80+CX
  2567.          Gosub _SHOW
  2568.       End If 
  2569.       If X>397 and X<464
  2570.          _G[398,210,463,222,1]
  2571.          _TXT["String to search:"]
  2572.          _EINGABE[19]
  2573.          If XFILE$=""
  2574.             _TXT["Search aborted !"]
  2575.             Return 
  2576.          End If 
  2577.          N$=XFILE$
  2578.          _TXT["Startaddress:"]
  2579.          _EINGABE[15]
  2580.          N=Abs(Val(XFILE$))
  2581.          If N-Len(N$)=>FGR
  2582.             _TXT["Illegal value of address !"]
  2583.             Return 
  2584.          End If 
  2585.          N=Hunt(Start(7)+N To Start(7)+FGR,N$)
  2586.          If N
  2587.             Add N,-Start(7)
  2588.             CX=N mod 80
  2589.             I4=N/80
  2590.             I3=I4*80+CX
  2591.             Gosub _SHOW
  2592.          Else 
  2593.             _TXT["String  » "+N$+" «  not found !"]
  2594.             Return 
  2595.          End If 
  2596.       End If 
  2597.       If X>469 and X<545
  2598.          _G[470,210,544,222,1]
  2599.          _TXT["From address <Return for start>:"]
  2600.          _EINGABE[34]
  2601.          N=Abs(Val(XFILE$))
  2602.          N=Min(N,FGR-1)
  2603.          _TXT["To address <Return for end>....:"]
  2604.          _EINGABE[34]
  2605.          C=Abs(Val(XFILE$))
  2606.          If C=0 : C=FGR : End If 
  2607.          C=Min(C,FGR)
  2608.          If N=>C
  2609.             _TXT["Illegal values for start- endaddress !"]
  2610.             Return 
  2611.          End If 
  2612.          _TXT["Filename <Return for old name> :"]
  2613.          _EINGABE[34]
  2614.          If XFILE$=""
  2615.             XFILE$=NF$
  2616.          End If 
  2617.          _TXT["Writing datas to "+B$+XFILE$+" !"]
  2618.          Bsave B$+XFILE$,Start(7)+N To Start(7)+C
  2619.       End If 
  2620.       If X>551 and X<575
  2621.          _G[552,210,574,222,1]
  2622.          _TXT[HELP$]
  2623.       End If 
  2624.       If X>581 and X<639
  2625.          _G[582,210,638,222,1]
  2626.          Wait 50
  2627.          Pop Proc
  2628.       End If 
  2629.    End If 
  2630. Return 
  2631. '
  2632. _POKE:
  2633.    Poke Start(7)+I3+CX+CY*80,N
  2634.    If N<32 or(N>127 and N<160)
  2635.       N=46
  2636.    End If 
  2637.    Ink 1 : Text CX*8,CY*8+22,Chr$(N)
  2638.    Gosub _ASCHEX
  2639.    N=28
  2640.    Gosub _ASCHEX
  2641. Return 
  2642. '
  2643. _SHOW:
  2644.    Ink 0 : Bar 0,15 To 640,209
  2645.    Ink 1
  2646.    For I=0 To 23
  2647.       For I2=0 To 79
  2648.          If I*80+I2+I3<FGR
  2649.             C=Peek(Start(7)+I*80+I2+I3)
  2650.             If C<32 or(C>127 and C<160)
  2651.                C=46
  2652.             End If 
  2653.             XLINE$=XLINE$+Chr$(C)
  2654.          End If 
  2655.       Next I2
  2656.       Inc I4
  2657.       Text 0,I*8+22,XLINE$
  2658.       XLINE$=""
  2659.    Next I
  2660.    CX=0
  2661.    CY=0
  2662.    CXALT=0
  2663.    CYALT=0
  2664.    LINE=I4-1
  2665.    Add LINE,-23
  2666.    LINE=Max(0,LINE)
  2667.    Gosub _ASCHEX
  2668. Return 
  2669. '
  2670. _ASCHEX:
  2671.    C=I3+CX+CY*80
  2672.    If N=28 and CX<79 and C+1<FGR Then Inc CX
  2673.    If N=29 and CX>0 Then Dec CX
  2674.    If N=30 and CY>0 Then Dec CY : Dec LINE
  2675.    If N=31 and CY<23 and C+80<FGR Then Inc CY : Inc LINE
  2676.    C=Peek(Start(7)+I3+CX+CY*80)
  2677.    C$=" 000"
  2678.    C0$=Str$(C)-" "
  2679.    Right$(C$,Len(C0$))=C0$
  2680.    Text 47,219,C$-" "
  2681.    Text 135,219,Hex$(C,2)
  2682.    C$=" 000000"
  2683.    C0$=Str$(I3+CX+CY*80)-" "
  2684.    Right$(C$,Len(C0$))=C0$
  2685.    Text 335,219,C$-" "
  2686.    C$=" 00000"
  2687.    Right$(C$,Len(Str$(LINE))-1)=Str$(LINE)-" "
  2688.    Text 231,219,C$-" "
  2689.    If C<32 or(C>127 and C<161) Then C=46
  2690.    Ink 1,0 : Text CXALT*8,CYALT*8+22,Chr$(CALT)
  2691.    Ink 1,2 : Text CX*8,CY*8+22,Chr$(C)
  2692.    Ink 1,0
  2693.    CALT=C
  2694.    CXALT=CX
  2695.    CYALT=CY
  2696. Return 
  2697. '
  2698. _G0:
  2699.    _G[0,210,80,222,0]
  2700.    _G[88,210,166,222,0]
  2701.    _G[175,210,277,222,0]
  2702.    _G[286,210,390,222,0]
  2703.    _G[398,210,463,222,0]
  2704.    _G[470,210,544,222,0]
  2705.    _G[552,210,574,222,0]
  2706.    _G[582,210,638,222,0]
  2707. Return 
  2708. '
  2709. _FEHLER:
  2710.    XE=Errn
  2711.    _ERROR[XE]
  2712. Resume Next 
  2713. End Proc
  2714. Procedure _EINGABE[N]
  2715.    N=N*8+8
  2716.    XFILE$=""
  2717.    Ink 2,0
  2718.    Do 
  2719.       Repeat : I=Asc(Inkey$) : Until I
  2720.       Exit If I=13
  2721.       If I<>8 and Len(XFILE$)<61
  2722.          XFILE$=XFILE$+Chr$(I)
  2723.       End If 
  2724.       If I=8 and Len(XFILE$)>0
  2725.          XFILE$=Left$(XFILE$,Len(XFILE$)-1)
  2726.       End If 
  2727.       Text 6+N,250,XFILE$+" "
  2728.       Clear Key 
  2729.    Loop 
  2730.    Ink 1
  2731. End Proc
  2732. Procedure _ERROR[XE]
  2733.    If XE=11 Then N$="Out of variable space"
  2734.    If XE=24 Then N$="Out of memory"
  2735.    If XE=47 Then N$="Screen not opened"
  2736.    If XE=79 Then N$="File already exist"
  2737.    If XE=81 Then N$="File not found"
  2738.    If XE=82 Then N$="Illegal file name"
  2739.    If XE=84 Then N$="Disk is write protected"
  2740.    If XE=85 Then N$="Directory not empty"
  2741.    If XE=86 Then N$="Device not available"
  2742.    If XE=88 Then N$="Disc full"
  2743.    If XE=89 Then N$="File is protected against deletation"
  2744.    If XE=94 Then N$="I/O error"
  2745.    If XE=95 Then N$="File format not recognised"
  2746.    If N$="" Then N$="Illegal function call"
  2747.    _TXT[N$+" !  « AMOS error #"+Str$(XE)-" "+" »"]
  2748. End Proc
  2749. Procedure _G[X,Y,X2,Y2,S]
  2750.    If S=0 Then C1=2 : C2=3 Else C1=3 : C2=2
  2751.    Ink C1 : Draw X,Y To X2-1,Y : Draw X,Y To X,Y2
  2752.    Ink C2 : Draw X+1,Y2 To X2,Y2 : Draw X2,Y To X2,Y2 : Ink 1,0
  2753. End Proc
  2754. Procedure _GETDEVICES[N]
  2755.    Dim XDEV$(50)
  2756.    Gosub L003
  2757.    If N=0
  2758.       Ink 0 : Bar 1,31 To 297,177
  2759.       For I2=0 To I
  2760.          XDIRA$(I2)=XDEV$(I2) : XSTATUSA(I2)=-2
  2761.       Next I2
  2762.       XPOSA=0 : XANZA#=I
  2763.       _SHOWDIR[0]
  2764.    Else 
  2765.       Ink 0 : Bar 342,31 To 638,177
  2766.       For I2=0 To I
  2767.          XDIRB$(I2)=XDEV$(I2) : XSTATUSB(I2)=-2
  2768.       Next I2
  2769.       XPOSB=0 : XANZB#=I
  2770.       _SHOWDIR[1]
  2771.    End If 
  2772.    Pop Proc
  2773. L003:
  2774.    If Drive("DF0:") Then XDEV$(0)="DF0:" : Inc I
  2775.    If Drive("DF1:") Then XDEV$(I)="DF1:" : Inc I
  2776.    If Drive("DF2:") Then XDEV$(I)="DF2:" : Inc I
  2777.    If Drive("DF3:") Then XDEV$(I)="DF3:" : Inc I
  2778.    If Drive("DH0:") Then XDEV$(I)="DH0:" : Inc I
  2779.    If Drive("VD0:") Then XDEV$(I)="VD0:" : Inc I
  2780.    XDEV$(I)="RAM:" : Inc I
  2781.    XDEV$(I)=Dev First$("")
  2782.    Do 
  2783.       If XDEV$(I)="" Then Dec I : Exit 
  2784.       I2=Instr(XDEV$(I),":")
  2785.       XDEV$(I)=Left$(XDEV$(I),I2)
  2786.       XDEV$(I)=Right$(XDEV$(I),I2-1)
  2787.       Inc I
  2788.       XDEV$(I)=Dev Next$
  2789.    Loop 
  2790.    Return 
  2791. End Proc
  2792. Procedure _HELP[MK,X,N]
  2793.    On Error Goto _FEHLER
  2794.    '
  2795.    XHELP=0
  2796.    If N=1 Then Add X,8
  2797.    If XMENABCD<3
  2798.       If Exist("SYS:LIBS/AmBOS.Lib")
  2799.          Restore Str$(XMENABCD)-" "
  2800.          For I=1 To X+1
  2801.             Read XPOS,XANZ
  2802.          Next I
  2803.          Set Input 10,-1
  2804.          I2=True
  2805.          Dec MK
  2806.          Open In 1,"SYS:LIBS/AmBOS.Lib"
  2807.             Pof(1)=XPOS*76+MK*7068
  2808.             If XE
  2809.                Goto _ENDOFHELP
  2810.             End If 
  2811.             For I=1 To XANZ
  2812.                Inc I2
  2813.                If I2=3 : I2=0 : Wait Key : End If 
  2814.                Line Input #1,N$
  2815.                _TXT[N$-"*"]
  2816.             Next I
  2817.          _ENDOFHELP:
  2818.          Close 1
  2819.       Else 
  2820.          _TXT["Can`t open SYS:LIBS/AmBOS.Lib !"]
  2821.       End If 
  2822.    Else 
  2823.       If X<14
  2824.          N$=XMEND$(X)
  2825.          If N$<>""
  2826.             _TXT[N$]
  2827.          Else 
  2828.             If MK=1
  2829.                _TXT["MenÜoption wurde noch nicht definiert !"]
  2830.             Else 
  2831.                _TXT["Menuoption is not defined yet !"]
  2832.             End If 
  2833.          End If 
  2834.       Else 
  2835.          If MK=1
  2836.             _TXT["Definiert eine Option mit einem CLI-Befehl !"]
  2837.          Else 
  2838.             _TXT["Defines an option with a CLI command !"]
  2839.          End If 
  2840.       End If 
  2841.    End If 
  2842. Pop Proc
  2843. '
  2844. 0 Data 0,1
  2845.   Data 1,2
  2846.   Data 3,2
  2847.   Data 5,2
  2848.   Data 7,1
  2849.   Data 8,1
  2850.   Data 9,1
  2851.   Data 10,2
  2852.   Data 12,1
  2853.   Data 13,2
  2854.   Data 15,2
  2855.   Data 17,2
  2856.   Data 19,2
  2857.   Data 21,2
  2858.   Data 23,1
  2859. 1 Data 24,1
  2860.   Data 25,2
  2861.   Data 27,2
  2862.   Data 29,1
  2863.   Data 30,1
  2864.   Data 31,3
  2865.   Data 34,4
  2866.   Data 38,2
  2867.   Data 40,2
  2868.   Data 42,2
  2869.   Data 44,1
  2870.   Data 45,2
  2871.   Data 47,1
  2872.   Data 48,2
  2873.   Data 50,1
  2874. 2 Data 51,2
  2875.   Data 53,2
  2876.   Data 55,1
  2877.   Data 56,2
  2878.   Data 58,2
  2879.   Data 60,2
  2880.   Data 62,1
  2881.   Data 63,18
  2882.   Data 81,2
  2883.   Data 83,1
  2884.   Data 84,1
  2885.   Data 85,3
  2886.   Data 88,1
  2887.   Data 89,2
  2888.   Data 91,1
  2889. '
  2890. _FEHLER:
  2891.    XE=Errn
  2892.    _ERROR[XE]
  2893.    Resume Next 
  2894. End Proc
  2895. Procedure _INSTALLAMBOS
  2896.    Screen Open 0,640,256,4,Hires
  2897.    Flash Off 
  2898.    Curs Off 
  2899.    Palette $77A,$124,$CCE,$557
  2900.    Colour Back $77A
  2901.    Colour 17,$FFF
  2902.    Colour 18,$0
  2903.    Colour 19,$E00
  2904. End Proc
  2905. Procedure _INSTALLSCREEN
  2906.    '* Pfeile
  2907.    '* ------
  2908.    Cls 0 : Ink 3 : For I=0 To 4 : Draw 5-I,1+I To 5+I,1+I : Next I : Bar 4,6 To 6,9 : Get Block 1,0,0,10,9,0 : Cls 0
  2909.    Put Block 1,304,154 : Put Block 1,325,154 : Vrev Block 1 : Put Block 1,304,169 : Put Block 1,325,169 : Del Block 1
  2910.    '
  2911.    '* Oben
  2912.    '* ----
  2913.    _G[110,0,529,12,0] : _G[0,0,107,12,0] : _G[532,0,639,12,0]
  2914.    '
  2915.    '* S Oben    
  2916.    '* ------
  2917.    _NEWGG[0] : _NEWGG[1]
  2918.    '
  2919.    _G[275,15,298,27,0] : _G[301,15,338,27,0] : _G[341,15,364,27,0]
  2920.    Ink 3 : Bar 307,19 To 312,23 : Bar 305,20 To 314,22
  2921.    Bar 318,20 To 332,22 : Draw 329,17 To 329,25 : Draw 330,18 To 330,24 : Draw 331,19 To 331,23 : Plot 333,21
  2922.    If XSD=1 Then XSD=0 : _SOURCEDEST
  2923.    Ink 2 : Text 283,24,Str$(X09A)-" " : Text 349,24,Str$(X09B)-" "
  2924.    '
  2925.    '* Balken
  2926.    '* ------
  2927.    _G[301,30,317,150,0] : _SCROLLBAR[0] : _G[301,152,317,164,0] : _G[301,166,317,178,0]
  2928.    _G[322,30,338,150,0] : _SCROLLBAR[1] : _G[322,152,338,164,0] : _G[322,166,338,178,0]
  2929.    _G[301,180,317,192,0] : Ink 3 : Bar 306,184 To 311,188 : Bar 304,185 To 313,187
  2930.    _G[322,180,338,192,0] : Ink 3 : Bar 327,184 To 332,188 : Bar 325,185 To 334,187
  2931.    '
  2932.    '* Dateifenster
  2933.    '* ------------
  2934.    _G[0,30,298,178,0] : _G[341,30,639,178,0]
  2935.    '
  2936.    _G[0,180,298,192,0] : _G[1,181,297,191,1]
  2937.    _G[341,180,639,192,0] : _G[342,181,638,191,1]
  2938.    '
  2939.    _OPTIONOFF
  2940.    _NEWMENU[XMENABCD]
  2941.    '
  2942.    _G[0,225,639,255,0] : _G[1,226,638,254,1]
  2943.    Ink 1,0 : For I=0 To 12 : Read X,Y,N$ : Text X,Y,N$ : Next I
  2944.    '
  2945.    _SHOWDIR[0] : _SHOWDIR[1] : Ink 1,0 : _SHOWNAME[0] : _SHOWNAME[1]
  2946.    '
  2947.    Def Scroll 1,2,34 To 296,178,0,-1
  2948.    Def Scroll 2,345,34 To 638,178,0,-1
  2949.    Def Scroll 3,2,31 To 296,176,0,1
  2950.    Def Scroll 4,345,31 To 638,176,0,1
  2951.    Def Scroll 5,6,229 To 636,253,0,-1
  2952.    '
  2953.    _MENU[XMENABCD]
  2954.    _MEMTIME
  2955.    Limit Mouse X Hard(0),Y Hard(0) To X Hard(639),Y Hard(255)
  2956.    '
  2957.    Data 6,9,"Mem:",542,9,"Time:",120,9,"AmBOS V2.0b (r) May, 29th 1993 by Volker Stepprath"
  2958.    Data 2,24,"Device",57,24,"Update",112,24,"Parent",180,24,"All",227,24,"Clear"
  2959.    Data 369,24,"Device",424,24,"Update",479,24,"Parent",547,24,"All",594,24,"Clear"
  2960. End Proc
  2961. Procedure _KONVERTIEREN[XREM$,XASSOURCE$,XDAT$]
  2962.    On Error Goto _FEHLER
  2963.    If XSD=0 Then A$=XDISKNAMEA$ : B$=XDISKNAMEB$ Else A$=XDISKNAMEB$ : B$=XDISKNAMEA$
  2964.    '
  2965.    N0=-1
  2966.    N$=XFILE$
  2967.    N=Val(Right$(N$,8))
  2968.    _REALNAME[N$]
  2969.    N$=A$+XFILE$
  2970.    '
  2971.    _TXT["Binary data file to read: "+N$-B$]
  2972.    Reserve As Data 7,N
  2973.    If XE Then Pop Proc
  2974.    Bload N$,Start(7)
  2975.    If XE Then Pop Proc
  2976.    '    
  2977.    _TXT[XASSOURCE$]
  2978.    _EINGABE[27]
  2979.    If XFILE$="" Then _TXT["Converting aborted !"] : Pop Proc Else N$=B$+XFILE$
  2980.    '
  2981.    _TXT["[L]ong / [W]ord / [B]yte:"]
  2982.    _EINGABE[27]
  2983.    N0$=Upper$(XFILE$)
  2984.    If N0$="L" Then N0=3
  2985.    If N0$="W" Then N0=1
  2986.    If N0$="B" Then N0=0
  2987.    If N0<0 Then _TXT["Illegal value... converting aborted !"] : Pop Proc
  2988.    If Instr(XDAT$,"DC.") Then XDAT$=XDAT$+N0$+" "
  2989.    '
  2990.    _TXT["# of data items per line:"]
  2991.    _EINGABE[27]
  2992.    N1=Val(XFILE$)
  2993.    If N1=0 Then _TXT["Converting aborted !"] : Pop Proc
  2994.    '    
  2995.    _TXT["Percent converted: 0   %"]
  2996.    '
  2997.    C$=""
  2998.    Open Out 1,N$
  2999.       If XE Then Pop Proc
  3000.       Print #1,XREM$+"*"+Str$(N/(N0+1))+" datas *";
  3001.       For I2=0 To N
  3002.          Text 166,250,Str$(100.0/N*I2)
  3003.          If Mouse Key<>0 Then I2=N : N=0
  3004.          If I2<N
  3005.             If N0=0 : C0$=Hex$(Peek(Start(7)+I2),2) : End If 
  3006.             If N0=1 : C0$=Hex$(Deek(Start(7)+I2),4) : End If 
  3007.             If N0=3 : C0$=Hex$(Leek(Start(7)+I2),8) : End If 
  3008.             C$=C$+C0$+","
  3009.             Add I2,N0
  3010.             Inc I4
  3011.             If I4=N1
  3012.                 Print #1,Chr$(10)+XDAT$+Left$(C$,Len(C$)-1);
  3013.                 C$=""
  3014.                 I4=0
  3015.             End If 
  3016.          End If 
  3017.       Next I2
  3018.       If N
  3019.          Text 174,250,"100"
  3020.          C$=Left$(C$,Len(C$)-1)
  3021.          If C$<>"" and(C$<>"$") : Print #1,Chr$(10)+XDAT$+C$; : End If 
  3022.          Print #1,Chr$(10);
  3023.       Else 
  3024.          _TXT["Converting aborted !"]
  3025.       End If 
  3026.    Close 1
  3027. Pop Proc
  3028. '
  3029. _FEHLER:
  3030.    XE=Errn
  3031.    _ERROR[XE]
  3032.    Resume Next 
  3033. End Proc
  3034. Procedure _KONVERTIERENASCPBK[N]
  3035.    If XSD=0 Then A$=XDISKNAMEA$ : B$=XDISKNAMEB$ Else A$=XDISKNAMEB$ : B$=XDISKNAMEA$
  3036.    On Error Goto _FEHLER
  3037.    '
  3038.    A=Val(Right$(XFILE$,8))
  3039.    _REALNAME[XFILE$]
  3040.    N$=B$+XFILE$
  3041.    '
  3042.    _TXT["Binary data file to read: "+XFILE$]
  3043.    If N=0
  3044.       Reserve As Data 7,A
  3045.       If XE : Pop Proc : End If 
  3046.       Bload N$,Start(7)
  3047.       If XE : Pop Proc : End If 
  3048.    Else 
  3049.       Pload N$,7
  3050.       If XE
  3051.          Pop Proc
  3052.       End If 
  3053.       A=Length(7)
  3054.    End If 
  3055.    '    
  3056.    _TXT["Save as converted source:"]
  3057.    _EINGABE[27]
  3058.    If XFILE$="" Then _TXT["Converting aborted !"] : Pop Proc
  3059.    N$=A$+XFILE$
  3060.    '
  3061.    _TXT["# of data items per line:"]
  3062.    _EINGABE[27]
  3063.    B=Val(XFILE$)
  3064.    If B<=0 Then _TXT["Converting aborted !"] : Pop Proc
  3065.    Dec A
  3066.    Dec B
  3067.    '
  3068.    Open Out 1,N$
  3069.       If XE Then Pop Proc
  3070.       _TXT["Percent converted: 0   %"]
  3071.       Print #1,"Rem *"+Str$(A+1)+" datas *";
  3072.       For I=0 To A
  3073.          N0$=""
  3074.          For I2=0 To B
  3075.             If I+I2<=A
  3076.                N0$=N0$+Str$(Peek(Start(7)+I+I2))+","
  3077.             End If 
  3078.          Next I2
  3079.          Add I,B
  3080.          Text 166,250,Str$(Min(100,100.0/A*(I+I2)))
  3081.          If Mouse Key<>0 : _TXT["Converting aborted !"] : I=A : End If 
  3082.          Print #1,Chr$(10)+"Data "+Left$(N0$,Len(N0$)-1)-" ";
  3083.       Next I
  3084.       Print #1,Chr$(10);
  3085.    Close 1
  3086. Pop Proc
  3087. '
  3088. _FEHLER:
  3089.    XE=Errn
  3090.    _ERROR[XE]
  3091.    Resume Next 
  3092. End Proc
  3093. Procedure _KOPIEREN[N$,N2$]
  3094.    If Upper$(N$)=Upper$(N2$)
  3095.       _TXT["Illegal filename !"]
  3096.       Pop Proc
  3097.    End If 
  3098.    '
  3099.    On Error Goto _FEHLER
  3100.    '
  3101.    Open Out 1,N2$
  3102.       If XE Then Pop Proc
  3103.    Close 1
  3104.    '
  3105.    _TXT["Copying... "+N$]
  3106.    '
  3107.    Reserve As Data 7,10000
  3108.    '
  3109.    N$=N$+Chr$(0)
  3110.    N2$=N2$+Chr$(0)
  3111.    '
  3112.    Dreg(1)=Varptr(N$)
  3113.    Dreg(2)=1005
  3114.    LVOOPENA=Doscall(-30)
  3115.    '
  3116.    Dreg(1)=Varptr(N2$)
  3117.    Dreg(2)=1006
  3118.    LVOOPENB=Doscall(-30)
  3119.    '
  3120.    Repeat 
  3121.       '
  3122.       Dreg(1)=LVOOPENA
  3123.       Dreg(2)=Start(7)
  3124.       Dreg(3)=10000
  3125.       LVOREAD=Doscall(-42)
  3126.       '
  3127.       Dreg(1)=LVOOPENB
  3128.       Dreg(2)=Start(7)
  3129.       Dreg(3)=LVOREAD
  3130.       LVOWRITE=Doscall(-48)
  3131.       '
  3132.    Until LVOREAD<10000
  3133.    '
  3134.    Dreg(1)=LVOOPENA
  3135.    LVOCLOSE=Doscall(-36)
  3136.    '
  3137.    Dreg(1)=LVOOPENB
  3138.    LVOCLOSE=Doscall(-36)
  3139.    '
  3140.    Erase 7
  3141. Pop Proc
  3142. '
  3143. _FEHLER:
  3144.    XE=Errn
  3145.    _ERROR[XE]
  3146.    Resume Next 
  3147. End Proc
  3148. Procedure _LEDONOFF
  3149.    _TXT["Press the SPACE BAR for filter On / Off !"]
  3150.    Repeat 
  3151.       If Inkey$=" "
  3152.          If N=1
  3153.             N=0
  3154.             Led Off 
  3155.          Else 
  3156.             N=1
  3157.             Led On 
  3158.          End If 
  3159.          Clear Key 
  3160.       End If 
  3161.    Until Mouse Key
  3162. End Proc
  3163. Procedure _LESEDISK[N$,N]
  3164.    If N$=Chr$(255) Then Pop Proc
  3165.    If N$="" Then Pop Proc
  3166.    If Exist(N$)=False Then Pop Proc
  3167.    '
  3168.    If N=0
  3169.       For I2=0 To 200
  3170.          XDIRA$(I2)=Chr$(255) : XSTATUSA(I2)=0
  3171.       Next I2
  3172.    Else 
  3173.       For I2=0 To 200
  3174.          XDIRB$(I2)=Chr$(255) : XSTATUSB(I2)=0
  3175.       Next I2
  3176.    End If 
  3177.    '
  3178.    Dir$=N$
  3179.    '
  3180.    XFILE$=Dir First$("")
  3181.    If XFILE$="" Then I=-1
  3182.    Do 
  3183.       If N=0
  3184.          If XFILE$<>"" : XDIRA$(I)=XFILE$ : End If 
  3185.       Else 
  3186.          If XFILE$<>"" : XDIRB$(I)=XFILE$ : End If 
  3187.       End If 
  3188.       XFILE$=Dir Next$
  3189.       If XFILE$="" or I=200 Then Exit Else Inc I
  3190.    Loop 
  3191.    Ink 0
  3192.    If N=0
  3193.       Bar 1,31 To 297,177
  3194.       XANZA#=I : XPOSA=0 : N=0
  3195.       XLENA#=115/Max(1,XANZA#) : XBARA#=Min(115,115/Max(1,XANZA#/18))-XLENA#
  3196.       XDISKNAMEA$=Dir$
  3197.       X09NAME$(X09A)=XDISKNAMEA$
  3198.    Else 
  3199.       Bar 342,31 To 638,177
  3200.       XANZB#=I : XPOSB=0 : N=1
  3201.       XLENB#=115/Max(1,XANZB#) : XBARB#=Min(115,115/Max(1,XANZB#/18))-XLENB#
  3202.       XDISKNAMEB$=Dir$
  3203.       X09NAME$(X09B)=XDISKNAMEB$
  3204.    End If 
  3205.    _MAKENAME[N]
  3206.    _SHOWDIR[N]
  3207.    _SHOWNAME[N]
  3208.    _SCROLLBAR[N]
  3209. End Proc
  3210. Procedure _MAKENAME[N]
  3211.    If N=0
  3212.       X09$(X09A)=""
  3213.       If XDIRA$(0)<>Chr$(255)
  3214.          For I=0 To XANZA#
  3215.             N$=XDIRA$(I)
  3216.             XSTATUSA(I)=0
  3217.             Gosub L001
  3218.             XDIRA$(I)=N$
  3219.             X09$(X09A)=X09$(X09A)+N$
  3220.          Next I
  3221.       End If 
  3222.    Else 
  3223.       X09$(X09B)=""
  3224.       If XDIRB$(0)<>Chr$(255)
  3225.          For I=0 To XANZB#
  3226.             N$=XDIRB$(I)
  3227.             XSTATUSB(I)=0
  3228.             Gosub L001
  3229.             XDIRB$(I)=N$
  3230.             X09$(X09B)=X09$(X09B)+N$
  3231.          Next I
  3232.       End If 
  3233.    End If 
  3234.    Pop Proc
  3235. L001:
  3236.    N2$=Right$(N$,8)
  3237.    N$=N$-N2$
  3238.    N2$=N2$-" "
  3239.    N$=Left$(N$,29)
  3240.    If N2$="" Then N2$="[DIR]" : N$=N$+Space$(29-Len(N$))
  3241.    N2$=Space$(8-Len(N2$))+N2$
  3242.    N$=Right$(N$,Len(N$)-1)
  3243.    N$=Left$(N$,28)+N2$
  3244.    Return 
  3245. End Proc
  3246. Procedure _MEMTIME
  3247.    N$=Str$(Chip Free+Fast Free)
  3248.    Text 36,9,N$
  3249.    '
  3250.    N$=Space$(12)
  3251.    Dreg(1)=Varptr(N$)
  3252.    LVODATESTAMP=Doscall(-192)
  3253.    H=Leek(Varptr(N$)+4)
  3254.    M=H mod 60
  3255.    H=H/60
  3256.    H$=" 00" : Right$(H$,Len(Str$(H))-1)=Str$(H)-" "
  3257.    M$=" 00" : Right$(M$,Len(Str$(M))-1)=Str$(M)-" "
  3258.    Text 590,9,(H$+":"+M$)-" "
  3259.    '
  3260.    Every On 
  3261. End Proc
  3262. Procedure _MENU[N]
  3263.    If N<3
  3264.       Restore Chr$(65+N)
  3265.       For I=0 To 7
  3266.          Read N$
  3267.          Ink 0 : Bar I*80+3,196 To I*80+77,206
  3268.          N=Text Length(N$)
  3269.          Ink 1 : Text I*80+40-N/2,204,N$
  3270.       Next I
  3271.       For I=0 To 6
  3272.          Read N$
  3273.          Ink 0 : Bar I*80+3,211 To I*80+77,221
  3274.          N=Text Length(N$)
  3275.          Ink 1 : Text I*80+40-N/2,219,N$
  3276.       Next I
  3277.    Else 
  3278.       For I=0 To 7
  3279.          Ink 0 : Bar I*80+3,196 To I*80+77,206
  3280.          N$=XMEND$(I)
  3281.          If N$<>""
  3282.             N=Instr(N$,"=")
  3283.             N$=Left$(N$,Min(N-1,9))
  3284.             N=Text Length(N$)
  3285.             Ink 2 : Text I*80+40-N/2,204,N$
  3286.          End If 
  3287.       Next I
  3288.       For I=0 To 6
  3289.          Ink 0 : Bar I*80+3,211 To I*80+77,221
  3290.          N$=XMEND$(I+8)
  3291.          If N$<>""
  3292.             N=Instr(N$,"=")
  3293.             N$=Left$(N$,Min(N-1,9))
  3294.             N=Text Length(N$)
  3295.             If I+8<14 : Ink 2 Else Ink 1 : End If 
  3296.             Text I*80+40-N/2,219,N$
  3297.          End If 
  3298.       Next I
  3299.    End If 
  3300. A: Data "COPY","COPY TO","MOVE","MOVE TO","DELETE","MAKE DIR","RENAME","PROTECT"
  3301.    Data "COMMENT","READ","HEX READ","SHOW IFF","EXECUTE","SIZE","INFO"
  3302. B: Data "SORT","MERGE","COMPARE","SAVE MEM","PACK","UNPACK","CHECK VEC","CLEAR SYS"
  3303.    Data "CONV ASM","CONV BAS","CONV ASC","CONV PBK","PLAY ABK","PLAY MED","PLAY MOD"
  3304. C: Data "VALUE","COLOURS","GET DAY","OPEN WB","CLOSE WB","CLOSE","ABOUT","EDITOR"
  3305.    Data "DISKCOPY","FORMAT","VERIFY","INSTALL","BLK DAT","DAT BLK","EXIT"
  3306. End Proc
  3307. Procedure _NEWGG[N]
  3308.    If N Then N=367
  3309.    For I=0 To 4 : _G[I*55+N,15,I*55+52+N,27,0] : Next I
  3310. End Proc
  3311. Procedure _NEWMENU[N]
  3312.    For I=0 To 3
  3313.       _G[I*20+561,210,I*20+577,222,0]
  3314.       Ink 2 : Text I*20+566,219,Chr$(65+I)
  3315.    Next I
  3316.    _G[N*20+561,210,N*20+577,222,1]
  3317. End Proc
  3318. Procedure _ORDNEN[B$]
  3319.    On Error Goto _FEHLER
  3320.    '
  3321.    FGR=Val(Right$(XFILE$,8))
  3322.    _REALNAME[XFILE$]
  3323.    '
  3324.    Reserve As Data 7,FGR
  3325.    If XE Then Pop Proc
  3326.    Bload B$+XFILE$,7
  3327.    If XE Then Pop Proc
  3328.    '
  3329.    _TXT["Sorting "+XFILE$+" ... !"]
  3330.    For X=0 To FGR
  3331.       F=Hunt(Start(7)+X To Start(7)+FGR,Chr$(10))
  3332.       If F Then Inc I2 : X=F-Start(7)
  3333.    Next X
  3334.    I6#=I2
  3335.    _TXT["Lines..............:"+Str$(I2)]
  3336.    '
  3337.    If I2<1
  3338.       _TXT["Sorry... can`t sort "+FILE$+" !"]
  3339.       Erase 7
  3340.       Pop Proc
  3341.    End If 
  3342.    '
  3343.    Dec I2
  3344.    Dim SF$(I2)
  3345.    For X=0 To I2
  3346.       SF$(X)=Chr$(255)
  3347.    Next X
  3348.    '
  3349.    _TXT["Calculating line...:"+Str$(I5)]
  3350.    For X=0 To FGR
  3351.       F=Hunt(Start(7)+X To Start(7)+FGR,Chr$(10))
  3352.       If F
  3353.          I3=Start(7)+X
  3354.          If Free<1000
  3355.             _ERROR[11]
  3356.             Pop Proc
  3357.          End If 
  3358.          For I4=I3 To F
  3359.             C=Peek(I4) : X$=X$+Chr$(C)
  3360.             If Mouse Key<>0
  3361.                _TXT["Sorting of "+XFILE$+" aborted !"]
  3362.                Pop Proc
  3363.             End If 
  3364.          Next I4
  3365.          X$=X$-Chr$(10)
  3366.          If Len(X$)>0
  3367.             SF$(I5)=X$+Chr$(10)
  3368.             Inc I5
  3369.          End If 
  3370.          X=F-Start(7)
  3371.          X$=""
  3372.          Text 182,250,Str$(I5)
  3373.       End If 
  3374.    Next X
  3375.    '
  3376.    Sort SF$(0)
  3377.    '
  3378.    For X=0 To I2
  3379.       If SF$(X)=Chr$(255) Then Dec I2
  3380.    Next X
  3381.    '
  3382.    _TXT["Lines after sorting:"+Str$(I2+1)]
  3383.    '
  3384.    Open Out 1,B$+XFILE$
  3385.       For I=0 To I2
  3386.          Print #1,SF$(I);
  3387.          SF$(I)=""
  3388.       Next I
  3389.    Close 1
  3390.    '
  3391.    _TXT["Sorting of "+XFILE$+" finished !"]
  3392. Pop Proc
  3393. '
  3394. _FEHLER:
  3395.    XE=Errn
  3396.    _ERROR[XE]
  3397.    Resume Next 
  3398. End Proc
  3399. Procedure _OPTIONOFF
  3400.    For I=0 To 7 : _G[1+I*80,195,(I+1)*80-2,207,0] : Next I
  3401.    For I=0 To 6 : _G[1+I*80,210,(I+1)*80-2,222,0] : Next I
  3402. End Proc
  3403. Procedure _REALNAME[N$]
  3404.    N$=N$-Right$(N$,8)
  3405.    For I=28 To 1 Step -1
  3406.       If Mid$(N$,I,1)<>" " Then N=I : I=1
  3407.    Next I
  3408.    XFILE$=Left$(N$,N)
  3409. End Proc
  3410. Procedure _RUN
  3411.    LVOOPENWORKBENCH=Intcall(-210)
  3412.    Wait Vbl 
  3413.    Amos To Back 
  3414.    Screen Close 0
  3415.    If Exist("SYS:") Then Dir$="SYS:"
  3416.    XFILE$=XFILE$+Chr$(0)
  3417.    '
  3418.    N2$="CON:0/0/640/200/PRESS LEFT AMIGA + A TO COME BACK !"+Chr$(0)
  3419.    Dreg(1)=Varptr(N2$)
  3420.    Dreg(2)=1006
  3421.    LVOOPEN=Doscall(-30)
  3422.    '
  3423.    Dreg(1)=Varptr(XFILE$)
  3424.    Dreg(2)=0
  3425.    Dreg(3)=LVOOPEN
  3426.    LVOEXECUTE=Doscall(-222)
  3427.    '
  3428.    Repeat 
  3429.       Multi Wait 
  3430.    Until Amos Here
  3431.    '
  3432.    Dreg(1)=LVOOPEN
  3433.    LVOCLOSE=Doscall(-36)
  3434.    '
  3435.    _INSTALLAMBOS
  3436.    _INSTALLSCREEN
  3437. End Proc
  3438. Procedure _TXT[N$]
  3439.    For I=0 To 7
  3440.       Wait Vbl : Scroll 5
  3441.    Next I
  3442.    Text 6,250,"> "+N$
  3443. End Proc
  3444. Procedure _SCROLLBAR[N]
  3445.    If N=0
  3446.       Ink 0 : Bar 306,32 To 312,149
  3447.       XBARPOSA#=XPOSA*XLENA#
  3448.       If XANZA#<18 : XBARA#=148 : XBARPOSA#=0 : End If 
  3449.       Ink 1 : Bar 306,32+XBARPOSA# To 312,Min(148,33+XBARPOSA#+XBARA#)
  3450.    Else 
  3451.       Ink 0 : Bar 327,32 To 333,149
  3452.       XBARPOSB#=XPOSB*XLENB#
  3453.       If XANZB#<18 : XBARB#=148 : XBARPOSB#=0 : End If 
  3454.       Ink 1 : Bar 327,32+XBARPOSB# To 333,Min(148,33+XBARPOSB#+XBARB#)
  3455.    End If 
  3456. End Proc
  3457. Procedure _SCROLLDOWN[N]
  3458.    If N=0
  3459.       If XPOSA>0
  3460.          Dec XPOSA
  3461.          For I=0 To 7 : Scroll 3 : Next I
  3462.          If XSTATUSA(XPOSA)=1 : Ink 2,1 : Else Ink 1,0 : End If 
  3463.          Text 5,39,XDIRA$(XPOSA)
  3464.          _SCROLLBAR[0]
  3465.       End If 
  3466.    Else 
  3467.       If XPOSB>0
  3468.          Dec XPOSB
  3469.          For I=0 To 7 : Scroll 4 : Next I
  3470.          If XSTATUSB(XPOSB)=1 : Ink 2,1 Else Ink 1,0 : End If 
  3471.          Text 346,39,XDIRB$(XPOSB)
  3472.          _SCROLLBAR[1]
  3473.       End If 
  3474.    End If 
  3475. End Proc
  3476. Procedure _SCROLLPAGE[N,Y]
  3477.    If N=0
  3478.       If XBARPOSA#<Y-32
  3479.          For I=1 To 17 : _SCROLLUP[0] : Next I
  3480.       Else 
  3481.          For I=1 To 17 : _SCROLLDOWN[0] : Next I
  3482.       End If 
  3483.    Else 
  3484.       If XBARPOSB#<Y-32
  3485.          For I=1 To 17 : _SCROLLUP[1] : Next I
  3486.       Else 
  3487.          For I=1 To 17 : _SCROLLDOWN[1] : Next I
  3488.       End If 
  3489.    End If 
  3490. End Proc
  3491. Procedure _SCROLLTOPBUTTOM[N,MK]
  3492.    If N=0
  3493.       If MK=1 : XPOSA=0 Else XPOSA=Max(0,XANZA#-17) : End If 
  3494.       _SCROLLBAR[0]
  3495.       _SHOWDIR[0]
  3496.    Else 
  3497.       If MK=1 : XPOSB=0 Else XPOSB=Max(0,XANZB#-17) : End If 
  3498.       _SCROLLBAR[1]
  3499.       _SHOWDIR[1]
  3500.    End If 
  3501. End Proc
  3502. Procedure _SCROLLUP[N]
  3503.    If N=0
  3504.       If XPOSA+17<200 and XPOSA+17<XANZA#
  3505.          Inc XPOSA
  3506.          For I=0 To 7 : Scroll 1 : Next I
  3507.          If XSTATUSA(XPOSA+17)=1 : Ink 2,1 Else Ink 1,0 : End If 
  3508.          Text 5,175,XDIRA$(XPOSA+17)
  3509.         _SCROLLBAR[0]
  3510.       End If 
  3511.    Else 
  3512.       If XPOSB+17<200 and XPOSB+17<XANZB#
  3513.          Inc XPOSB
  3514.          For I=0 To 7 : Scroll 2 : Next I
  3515.          If XSTATUSB(XPOSB+17)=1 : Ink 2,1 Else Ink 1,0 : End If 
  3516.          Text 346,175,XDIRB$(XPOSB+17)
  3517.          _SCROLLBAR[1]
  3518.       End If 
  3519.    End If 
  3520. End Proc
  3521. Procedure _SELEKTION[N,MK,Y]
  3522.    Y=(Y-32)/8
  3523.    If N=0
  3524.       If XSTATUSA(Y+XPOSA)=-2
  3525.          Ink 2,1 : Text 6,39+Y*8,XDIRA$(Y+XPOSA)+Space$(36-Len(XDIRA$(Y+XPOSA)))
  3526.          _LESEDISK[XDIRA$(Y+XPOSA),0]
  3527.          Pop Proc
  3528.       End If 
  3529.       If XSTATUSA(Y+XPOSA)=0
  3530.          XSTATUSA(Y+XPOSA)=1
  3531.       Else 
  3532.          XSTATUSA(Y+XPOSA)=0
  3533.       End If 
  3534.       _SHOWDIR[0]
  3535.       If MK=2 and(Right$(XDIRA$(Y+XPOSA),5)="[DIR]")
  3536.          N$=XDIRA$(Y+XPOSA)
  3537.          Gosub L002
  3538.          N$=XDISKNAMEA$+N$
  3539.          _LESEDISK[N$,0]
  3540.       End If 
  3541.    Else 
  3542.       If XSTATUSB(Y+XPOSB)=-2
  3543.          Ink 2,1 : Text 346,39+Y*8,XDIRB$(Y+XPOSB)+Space$(36-Len(XDIRB$(Y+XPOSB)))
  3544.          _LESEDISK[XDIRB$(Y+XPOSB),1]
  3545.          Pop Proc
  3546.       End If 
  3547.       If XSTATUSB(Y+XPOSB)=0
  3548.          XSTATUSB(Y+XPOSB)=1
  3549.       Else 
  3550.          XSTATUSB(Y+XPOSB)=0
  3551.       End If 
  3552.       _SHOWDIR[1]
  3553.       If MK=2 and(Right$(XDIRB$(Y+XPOSB),5)="[DIR]")
  3554.          N$=XDIRB$(Y+XPOSB)
  3555.          Gosub L002
  3556.          N$=XDISKNAMEB$+N$
  3557.          _LESEDISK[N$,1]
  3558.       End If 
  3559.    End If 
  3560. Pop Proc
  3561. '
  3562. L002:
  3563.    N$=Left$(N$,31)
  3564.    N=30
  3565.    For I=29 To 1 Step -1
  3566.       If Mid$(N$,I,1)=" " Then Dec N Else I=1
  3567.    Next I
  3568.    N$=Left$(N$,N-1)
  3569. Return 
  3570. End Proc
  3571. Procedure _SHOWDIR[N]
  3572.    If N=0
  3573.       If XDIRA$(0)=Chr$(255) : Pop Proc : End If 
  3574.       For I=0 To 17
  3575.          If XSTATUSA(I+XPOSA)=1 : Ink 2,1 Else Ink 1,0 : End If 
  3576.          If I+XPOSA<=XANZA# : Text 5,39+I*8,XDIRA$(I+XPOSA) : End If 
  3577.       Next I
  3578.    Else 
  3579.       If XDIRB$(0)=Chr$(255) : Pop Proc : End If 
  3580.       For I=0 To 17
  3581.          If XSTATUSB(I+XPOSB)=1 : Ink 2,1 Else Ink 1,0 : End If 
  3582.          If I+XPOSB<=XANZB# : Text 346,39+I*8,XDIRB$(I+XPOSB) : End If 
  3583.       Next I
  3584.    End If 
  3585. End Proc
  3586. Procedure _SHOWNAME[N]
  3587.    Ink 1,0
  3588.    If N=0
  3589.       Text 5,188,Space$(36) : Text 5,188,Left$(XDISKNAMEA$,36)
  3590.    Else 
  3591.       Text 346,188,Space$(36) : Text 346,188,Left$(XDISKNAMEB$,36)
  3592.    End If 
  3593. End Proc
  3594. Procedure _SOURCEDEST
  3595.    Add XSD,1,0 To 1
  3596.    Get Block 1,302,16,36,10,1
  3597.    Ink 0 : Bar 302,16 To 337,26
  3598.    Hrev Block 1
  3599.    Put Block 1,288,16
  3600.    Del Block 1
  3601.    Wait 5
  3602. End Proc
  3603. Procedure _X09AB[N]
  3604.    If N=0
  3605.       XANZA#=Max(0,Len(X09$(X09A))/36-1) : XPOSA=0
  3606.       XLENA#=115/Max(1,XANZA#) : XBARA#=Min(115,115/Max(1,XANZA#/18))-XLENA#
  3607.       For I=0 To 200
  3608.          XDIRA$(I)=Chr$(255)
  3609.          XSTATUSA(I)=0
  3610.       Next I
  3611.       For I=0 To XANZA#
  3612.          N$=Mid$(X09$(X09A),I*36+1,36)
  3613.          XDIRA$(I)=N$
  3614.       Next I
  3615.       XDISKNAMEA$=X09NAME$(X09A)
  3616.       Ink 0 : Bar 1,31 To 297,177
  3617.       _SHOWDIR[0]
  3618.       _SHOWNAME[0]
  3619.       Ink 2,0 : Text 283,24,Str$(X09A)-" "
  3620.    Else 
  3621.       XANZB#=Max(0,Len(X09$(X09B))/36-1) : XPOSB=0
  3622.       XLENB#=115/Max(1,XANZB#) : XBARB#=Min(115,115/Max(1,XANZB#/18))-XLENB#
  3623.       For I=0 To 200
  3624.          XDIRB$(I)=Chr$(255)
  3625.          XSTATUSB(I)=0
  3626.       Next I
  3627.       For I=0 To XANZB#
  3628.          N$=Mid$(X09$(X09B),I*36+1,36)
  3629.          XDIRB$(I)=N$
  3630.       Next I
  3631.       XDISKNAMEB$=X09NAME$(X09B)
  3632.       Ink 0 : Bar 342,31 To 638,177
  3633.       _SHOWDIR[1]
  3634.       _SHOWNAME[1]
  3635.       Ink 2,0 : Text 349,24,Str$(X09B)-" "
  3636.    End If 
  3637. End Proc
  3638.